有關於這個主題一個很好的MSDN雜誌文章,WPF應用程序與模型 - 視圖 - 視圖模型設計模式:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
根據這篇文章,數據模型和信息庫段(http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090102),你會發現一個簡單的實現。 Customer是實體類,ViewModel從實體獲取錯誤指示符。
您可以使用ValidationsRule來檢查數據的有效性:
<TextBox x:Name="title" VerticalAlignment="Top" TextWrapping="Wrap" Grid.Column="1" MinWidth="20">
<TextBox.Text>
<Binding Path="Title" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<Validators:StringRangeValidationRule MinimumLength="1" MaximumLength="30"
ErrorMessage="Address is required and must be less than 30 letters." />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
這是驗證造型的例子:
<Application.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<Image Source="/Images/error.png" Width="25" Height="25" ToolTip="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
<TextBlock DockPanel.Dock="Right"
Foreground="Orange"
Margin="5"
FontSize="12pt"
Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
</TextBlock>
<Border BorderBrush="Red" BorderThickness="3">
<AdornedElementPlaceholder Name="MyAdorner" />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
與上面相同的問題,您如何將實體中的錯誤傳播給veiwmodel?你有沒有設法做到這一點? – TheCodeKing 2010-09-17 20:16:45
這個答案與MS的最佳實踐相矛盾(http://msdn.microsoft.com/en-us/library/gg405484(v=PandP.40).aspx):通常,模型實現了易於綁定的工具到視圖。這通常意味着它通過INotifyPropertyChanged和INotifyCollectionChanged接口支持屬性和集合更改通知。該模型還可以通過IDataErrorInfo(或INotifyDataErrorInfo)接口支持數據驗證和錯誤報告。這些接口允許在值更改時通知WPF和Silverlight數據綁定,以便可以更新UI – Pat 2010-12-01 16:06:04