2011-03-02 4 views
3

Я пытаюсь сделать группу привязки для вычисления, если строка действительна на основе 3 текстовых полей в datagrid.Группы привязки XAML

Я создал класс 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]; 

Теперь, когда я бегу приложение, значение, которое входит в класс правил проверки, всегда является первой строкой в ​​моем datagrid, nev (если только вы не проверяете первую строку!)

Я не сделал этого раньше, и примеры, которые я нахожу arent, используя 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, datagrid находится в – Purplegoldfish

+0

@Purplegoldfish - Это странно, потому что я только что создал тестовый проект, и все отлично работает ... Используете ли вы DataGridTemplateColumn 'для привязок? Пожалуйста, дважды проверьте, что строки действительно имеют объект типа 'StockInformationDVM' как свой' DataContext'. –

+0

Я использую DataGridTemplateColumn для столбцов, а ItemSource дефинитивно связан с StockInformationDVM. Я не имею DataContext = "", указанный в datagrid, хотя я предположил, что набор ItemsSource будет достаточным. – Purplegoldfish

Смежные вопросы