2016-03-05 2 views
0

Мой класс:WPF DataGrid Checkbox NotifyOnTargetUpdated не работает

public class BarCode : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public string code { get; set; } 
    public string name { get; set; } 
    public Visibility special1 { get; set; } 
    public Visibility special2 { get; set; } 
    private bool _x1, _x2; 
    public bool x1 
    { 
     get 
     { 
      return _x1; 
     } 
     set 
     { 
      if (value && _x2) 
       _x2 = false; 
      _x1 = value; 
      OnPropertyChanged("X1"); 
     } 
    } 
    public bool x2 
    { 
     get 
     { 
      return _x2; 
     } 
     set 
     { 
      if (value && _x1) 
       _x1 = false; 
      _x2 = value; 
      OnPropertyChanged("X2"); 
     } 
    } 
} 

XAML:

<DataGridTemplateColumn Header="X"> 
     <DataGridTemplateColumn.CellStyle> 
      <Style TargetType="DataGridCell"> 
       <Setter Property="Visibility" Value="{Binding special1}"></Setter> 
      </Style> 
     </DataGridTemplateColumn.CellStyle> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <CheckBox IsChecked="{Binding Path=.x1, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"/> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 

    <DataGridTemplateColumn Header="X"> 
     <DataGridTemplateColumn.CellStyle> 
      <Style TargetType="DataGridCell"> 
       <Setter Property="Visibility" Value="{Binding special2}"></Setter> 
      </Style> 
     </DataGridTemplateColumn.CellStyle> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <CheckBox IsChecked="{Binding Path=.x2, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"/> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 

У меня есть два CheckBoxes. Когда первый проверяется, и я хочу проверить второй, то первый из них должен быть отменен. Но это не обновление. Галочка уходит только тогда, когда я прокручиваюсь из видимости.

EDIT: Я изменил распределение _x1 = false и _x2 = false в сеттерах на x1 = false и x2 = false. Спасибо dkozl за ваш комментарий.

public bool x1 
{ 
    get 
    { 
     return _x1; 
    } 
    set 
    { 
     if (value && _x2) 
      _x2 = false; 
     x1 = value; 
     OnPropertyChanged("X1"); 
    } 
} 
public bool x2 
{ 
    get 
    { 
     return _x2; 
    } 
    set 
    { 
     if (value && _x1) 
      _x1 = false; 
     x2 = value; 
     OnPropertyChanged("X2"); 
    } 
} 

}

+0

своих свойства являются '' x1' и x2' но вы увеличиваете событие для 'X1' и' X2' (капитал X), а имена свойств чувствительны к регистру. Также, когда вы меняете x2 в x1 setter, сделайте это 'x2 = false;' или событие для 'x2', а также – dkozl

+0

Спасибо dkozl, он работает, когда я использую в setter x2 выделение _x1-x1. – raze92

ответ

0

Попробуйте использовать режим TwoWay:

<CheckBox IsChecked="{Binding Path=.x1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"/> 

Если вы просто хотите, один флажок, влияют на состояние другого, то elementbinding будет полезно, как хорошо.

+0

Это не работает. – raze92

0

Я думаю, что вы над мыслящим вашим выражением привязки

у вас есть этот

<CheckBox IsChecked="{Binding Path=.x2, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"/> 

Когда все, что вам нужно это это

<CheckBox IsChecked="{Binding Path=x2, Mode=TwoWay}"/> 
Смежные вопросы