我正在開發WPF
應用程序,使用MVVM
模式並使用Prism
框架。如何使用INotifyDataErrorInfo接口驗證Observable集合
我有一個基本的數據類如下。
public class ProductDecorator : DecoratorBase<Product>
{
private string _ProductShortName;
private Boolean _IsSelected = false;
// I have omitted some code for clarity here.
[Required]
public int ProductID
{
get { return BusinessEntity.ProductID; }
set
{
SetProperty(() => BusinessEntity.ProductID == value,
() => BusinessEntity.ProductID = value);
}
}
public Boolean IsSelected
{
get { return _IsSelected; }
set
{
SetProperty(ref _IsSelected, value);
}
}
}
我在ViewModel中創建了上述數據類的可觀察集合。
public class SaleInvoiceViewModel {
private ObservableCollection<ProductDecorator> _productDecorators;
public ObservableCollection<ProductDecorator> ProductDecorators
{
get { return _productDecorators; }
set { SetProperty(ref _productDecorators, value); }
}
}
而且我將這個可觀察集合綁定到View中的列表框。
<telerik:RadListBox ItemsSource="{Binding ProductDecorators}" HorizontalAlignment="Stretch" Margin="5,10,5,5" Grid.Column="1" VerticalAlignment="Top">
<telerik:RadListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Margin="2" IsChecked="{Binding IsSelected}" />
<TextBlock Text="{Binding ProductShortName}" FontSize="14" />
</StackPanel>
</DataTemplate>
</telerik:RadListBox.ItemTemplate>
</telerik:RadListBox>
從上面的上下文中,我想驗證「用戶必須至少選擇列表框中的一個項目」。換句話說,IsSelected
財產必須是真在ProductUmDecorator
類從類可觀察收集ProductUmDecorators
其中之一。
當前我使用INotifyDataErrorInfo
接口和Data Annotations
作爲驗證規則。我輸了我應該如何實現我的問題來實現這個驗證?
我已經去了一個SelectedProductUmDecorator聚會,並將其標記爲無效,如果是空的。你必須有其他的方式來表示集合中的選定元素[edit:duh,yeah],所以如果沒有選中任何一個,可能會嘗試將ProductUmDecorators標記爲無效? – Will