XAML绑定组

3

我正在尝试创建一个绑定组,根据数据网格中的3个文本框计算一行是否有效。

我已经创建了一个ValidationRule类,然后在我的数据网格中:

       <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];

现在当我运行应用程序时,传递到验证规则类中的值始终是我的数据网格中的第一行,而不是正在验证的行(除非您正在验证第一行!)我以前没有做过这个,并且我找到的示例没有使用MVVM,所以可能会有问题。
1个回答

1

尝试将绑定组指定为DataGrid.ItemBindingGroup而不是DataGrid.BindingGroup

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

在这种情况下,您实际上可以省略为绑定组指定名称。它将自动用于一行中的所有绑定。

感谢您的快速回复,不幸的是它并没有完全正常工作,似乎bindingGroup.Items[0];现在不是行绑定到的项目类型,而是启动包含数据网格的ViewModel。 - Purplegoldfish
@Purplegoldfish - 这很奇怪,因为我刚刚创建了一个测试项目,一切都运行得很好...你是否使用DataGridTemplateColumn进行绑定?请仔细检查行是否确实具有类型为StockInformationDVM的对象作为它们的DataContext - Pavlo Glazkov
我正在使用DataGridTemplateColumn作为列,而ItemsSource绝对绑定到StockInformationDVM。但是在datagrid上我没有指定DataContext = "",我认为设置ItemsSource就足够了。 - Purplegoldfish
@Purplegoldfish - ItemsSource应该足够了。我已经没有任何想法为什么在你的情况下它不起作用了... - Pavlo Glazkov
谢谢你的帮助,我猜解决方案最终会出现,尽管我对这个问题也没有更多的想法。 - Purplegoldfish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接