2011-05-12 50 views
4

使用XAML(注意在字典項綁定屬性[歡迎]): 如何在字符串索引器數據綁定上實現IDataErrorInfo?

 <Grid x:Name="LayoutRoot"> 
     <StackPanel> 
      <TextBlock FontSize="36" 
        FontWeight="Bold" 
        Foreground="Purple" 
        Text="{Binding Attributes[Welcome]}" 
        VerticalAlignment="Center" 
        HorizontalAlignment="Center" 
        TextWrapping="Wrap" /> 
      <TextBox Text="{Binding Attributes[Welcome],Mode=TwoWay, ValidatesOnDataErrors=True}"></TextBox> 
      <TextBox Text="{Binding Attributes[Welcome],Mode=TwoWay, ValidatesOnDataErrors=True}"></TextBox> 
      <TextBox Text="{Binding Test, Mode=TwoWay, ValidatesOnDataErrors=True}"></TextBox> 
      <TextBox Text="{Binding Test, Mode=TwoWay, ValidatesOnDataErrors=True}"></TextBox> 
     </StackPanel> 
    </Grid>
當作爲視圖模型實現IDataErrorInfo的:

 

     public string Error 
     { 
      get { return ""; } 
     } 

     public string this[string columnName] 
     { 
      get { 
       return "Compulsory Error"; 
      } 
     } 

 

只有COLUMNNAME == 「測試」 曾經通過。因此,我得到以下應用程序: enter image description here
如何驗證爲屬性字典設置的值?

回答

0

我想我需要在Dictionary上實現IDataErrorInfo而不是包含字典的viewmodel。但是,由於IDataErrorInfo成員與IDicitonary發生衝突。我結束了實現INotifyDataErrorInfo。

0

而不是使用字典,更多的「MVVMish」方式將創建一個簡單的ViewModel爲您要在列表中顯示的項目。然後將它們添加到列表(而不是字典)並綁定到這些項目。然後,您可以在這些ViewModel上實現IDataErrorInfo(以及任何其他自定義邏輯或您需要的任何其他內容)。

+0

沒有。 IList不再比IDictionary更酷。更不用說,那麼我將綁定到像屬性[0]而不是屬性[歡迎]。毫無疑問,哪個xaml更清潔。 – basarat 2011-05-13 04:20:28