【发布时间】:2023-03-17 16:24:01
【问题描述】:
我是 MVVM 新手,最近才开始遵循 MVVM 模式的第一个项目。我在尝试使用 IDataErrorInfo 接口验证 ObservableCollection 时遇到问题。我的 ObservableCollection 看起来像这样:
ObservableCollection<Magazine> magazineRepository;
public ObservableCollection<Magazine> MagazineRepository
{
get { return magazineRepository; }
set
{
if (value != null)
{
bladRepository = value;
OnPropertyChanged("MagazineRepository");
}
}
}
我的 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}" />
它只是一个简单的包含对象的列表框,当你选择一个项目时,被选择的对象属性显示在文本框中,然后绑定到列表框对象。
我的问题是,当我像这样设置我的代码时,我可以弄清楚如何验证我的数据的唯一方法是在域模型中,这确实不是一个好习惯,我想验证在 ViewModel 到达那里之前。基本上我想在 ViewModel 中验证 MagazineRepository 中的每个属性,你会怎么做呢?
PS:如果我的问题缺少信息,我是在此板(以及一般编程板)上发帖的新手,请告诉我,我会提供所需的详细信息。
非常感谢。
【问题讨论】:
-
好吧,我在您发布的代码中没有看到 ViewModel,但典型的方法是让您的 ViewModel 实现 IDataErrorInfo
-
对不起,我以为是暗示的。集合在我的 ViewModel 中,它确实实现了 IDataErrorInfo,但是当文本框更改集合中的属性时,我需要验证该属性,但我不知道该怎么做。所以有 2 个文本框,每个文本框都绑定到集合中的一个属性,当该属性更改时,我需要对其进行验证,按照我在 IDataErrorInfo 中学习的方式进行验证,我只能验证整个集合。