2011-03-02 111 views
3

我想做一個綁定組來計算,如果一行是基於數據網格中的3個文本框有效。XAML綁定組

我創建了一個有效性規則類,然後在我的DataGrid我:

 <DataGrid.BindingGroup> 
      <BindingGroup Name="RowBindingGroup"> 
      <BindingGroup.ValidationRules> 
       <util:MinMaxParValidationRule ValidationStep="CommittedValue" /> 
      </BindingGroup.ValidationRules> 
      </BindingGroup> 
     </DataGrid.BindingGroup> 

<TextBox.Text> 
    <Binding Path="ParStockLevel" UpdateSourceTrigger="PropertyChanged" BindingGroupName="RowBindingGroup" /> 
</TextBox.Text> 

我的驗證規則類的樣子

public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
    ValidationResult result = ValidationResult.ValidResult; 
    BindingGroup bindingGroup = (BindingGroup)value; 

    StockInformationDVM row = (StockInformationDVM)bindingGroup.Items[0]; 

現在,當我運行應用程序進入驗證規則類的值始終是我的datagrid,nev中的第一行呃正在驗證的行(除非你正在驗證第一行!)

我沒有做過之前,我發現沒有使用MVVM的例子,所以可能有問題。

回答

1

嘗試指定你結合基團爲DataGrid.ItemBindingGroup,而不是DataGrid.BindingGroup

<DataGrid.ItemBindingGroup> 
    <BindingGroup> 
     <BindingGroup.ValidationRules> 
     <util:MinMaxParValidationRule ValidationStep="CommittedValue" /> 
     </BindingGroup.ValidationRules> 
    </BindingGroup> 
</DataGrid.ItemBindingGroup> 

在這種情況下,你其實可以省略爲你的綁定組指定名稱。它將自動用於連續的所有綁定。

+0

感謝您的快速響應,不幸的是,它並沒有正常工作,似乎bindingGroup.Items [0];現在不是行綁定到的項目的類型,而是啓動ViewModel的ViewModel數據網格在 – Purplegoldfish 2011-03-03 10:29:40

+0

@Purplegoldfish - 這很奇怪,因爲我剛剛創建了一個測試項目,並且一切都很好......您是否使用'DataGridTemplateColumn '綁定?請仔細檢查行確實是否有'StockInformationDVM'類型的對象作爲它們的'DataContext'。 – 2011-03-03 12:26:05

+0

我正在使用DataGridTemplateColumn作爲列,並且ItemsSource被清零地綁定到StockInformationDVM。我沒有在DataGrid上指定DataContext =「」,但我認爲ItemsSource集足夠了。 – Purplegoldfish 2011-03-03 13:36:07