Связывающие группы XAML - PullRequest
3 голосов
/ 02 марта 2011

Я пытаюсь создать группу привязок, чтобы вычислить допустимость строки на основе 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 голос
/ 02 марта 2011

Попробуйте указать группу привязок как DataGrid.ItemBindingGroup вместо DataGrid.BindingGroup:

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

И в этом случае вы фактически можете опустить указание имени для группы привязок.Он будет автоматически использоваться для всех привязок подряд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...