我有一个AddClientViewModel,由2个视图(AddClientView和SuggestedAddressesView)引用.AddClientView是一个具有地址字段的表单.表单有一个验证按钮,使用地理编码验证输入的地址.如果返回多个地址,则打开SuggestedAddressesView.
以下是我目前的做法:
AddClientViewModel:
private void ValidateExecute(object obj)
{
SuggestedAddresses = new ObservableCollection<DBHelper.GeocodeService.GeocodeResult>(GeoCodeTest.SuggestedAddress(FormattedAddress));
....
if (SuggestedAddresses.Count > 0)
{
var window = new SuggestedAddressesView(this);
window.DataContext = this;
window.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
这是SuggestedAddressesView构造函数,其中AddClientViewModel从ViewModelBase继承
public SuggestedAddressesView(ViewModelBase viewModel)
{
InitializeComponent();
viewModel.ClosingRequest += (sender, e) => this.Close();
}
Run Code Online (Sandbox Code Playgroud)
我遇到的另一个问题是当我从AddClientViewModel调用OnClosingRequest()时... AddClientView和SuggestedAddressesView都关闭.我知道这是因为两个视图都引用了相同的ViewModel.这不是我想要的行为.我希望能够独立关闭任一窗口.
从ViewModel正确的MVVM结构打开一个View,我将如何独立关闭窗口?
我在 WPF 应用程序中使用 EntityFramework 库,但遇到以下问题:我正在使用 MVVM 模式(据我所知),并且我正在尝试使用 EF 值进行组合框查找。
这是 OfficeView 类:
public partial class AddOffice : Window
{
private DBHelper.ResourceManagementContext context = new DBHelper.ResourceManagementContext();
public AddOffice()
{
InitializeComponent();
context.Companies.Load();
this.DataContext = context.Companies.Local;
//this.DataContext = new AddOfficeViewModel();
}
public void CloseCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
this.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
这是相应的 XAML:
<Label Grid.Row="4" Grid.Column="0" Margin="10,10">Company:</Label>
<ComboBox Grid.Row="4" Grid.Column="1" Margin="10,10"
ItemsSource="{Binding}"
DisplayMemberPath="CompanyName"
SelectedValuePath="CompanyName"
SelectedValue="{Binding Path=CompanyName}"/>
Run Code Online (Sandbox Code Playgroud)
我知道 MVVM 模式通常将 ViewModel 传递给 View,那么如何使用 OfficeViewModel 将 EntityFramework …
我正在使用Entity Framework,我正在向数据库表添加User(UserName和Password).该表有一个UserNamecolumn(nchar(20))和一个Passwordhashed(varchar(50))列.
从数据库中检索用户时出现问题.返回的用户名在末尾用空格填充(直到填充了20个字符).我已经使用该Trim()方法暂时解决了这个问题,但考虑到我需要在从数据库返回的每一列上执行此操作,这似乎不切实际.
另一种解决方案是什么?
谢谢!