我是MVVM的新手,刚刚在MVVM模式之后开始了我的第一个项目.我尝试使用IDataErrorInfo接口验证ObservableCollection时遇到问题.我的ObservableCollection看起来像这样:
ObservableCollection<Magazine> magazineRepository;
public ObservableCollection<Magazine> MagazineRepository
{
get { return magazineRepository; }
set
{
if (value != null)
{
bladRepository = value;
OnPropertyChanged("MagazineRepository");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的XAML是这样的:
<ListBox x:Name="listMagazineRepository"
Grid.ColumnSpan="2"
ItemsSource="{Binding}"
DataContext="{Binding MagazineRepository}"
DisplayMemberPath="Navn"
SelectedItem="{Binding Path=SelectedItem}"/>
<TextBox x:Name="txtName" Grid.Row="1" Grid.Column="0"
Text="{Binding ElementName=listMagazineRepository, Path=SelectedItem.Navn, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
<TextBox x:Name="txtPrice" Grid.Row="2" Grid.Column="0"
Text="{Binding ElementName=listMagazineRepository, Path=SelectedItem.Pris, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
Run Code Online (Sandbox Code Playgroud)
它只是一个包含对象的简单列表框,当您选择一个项目时,所选对象属性将显示在文本框中,然后绑定到列表框对象.
我的问题是,当我像这样设置代码时,我能够弄清楚如何验证我的数据的唯一方法是在域模型中,这实际上不是一个好习惯,我想在ViewModel中验证在它到达之前.基本上我想验证MagazineRepository中的每个属性,在ViewModel中,你会怎么做呢?
PS:如果我的问题缺乏信息,我很想在这个主板(以及一般的编程板)上发帖,请告诉我,我将提供所需的详细信息.
非常感谢.
如果我理解正确的话,您想验证 Magazine 对象。如果是这种情况,一种方法是将该类包装在视图模型中,我们称之为 MagazineVM,它实现 IDataErrorInfo 并保持杂志对象更新。然后您将视图绑定到 MagazineVM 列表。举一个非常简单的例子:
public class MagazineVM : IDataErrorInfo, INotifyPropertyChanged
{
private Magazine _magazine;
public int FirstMagazineProperty
{
get { return _magazine.FirstMagazineProperty; }
set { _magazine.FirstMagazineProperty = value; RaisePropertyChanged("FirstMagazineProperty"); }
}
//INotifyPropertyChanged implementation
//IDataErrorInfo implementation
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |