2016-08-03 24 views
0

Nach dem Ändern von CheckBox.IsChecked von DataTrigger Quellwert, an den CheckBox.IsChecked gebunden hat, ändert sich nicht.CheckBox-Bindung aktualisiert die Quelle nicht

Ich habe einfach Ansichtsmodell

public class ViewModel : INotifyPropertyChanged 
    {  
     private bool check1;  
     public bool Check1 
     { 
      get { return check1; } 
      set { check1 = value; NotifyPropertyChanged(); } 
     }  

     private bool check2;  
     public bool Check2 
     { 
      get { return check2; } 
      set { check2 = value; NotifyPropertyChanged(); } 
     } 

     #region Notify 
     ...  
     #endregion 
    } 

und einfache XAML

<StackPanel Grid.Row="1"> 
     <CheckBox Content="Check1"> 
      <CheckBox.Style > 
       <Style TargetType="{x:Type CheckBox}"> 
        <Setter Property="IsChecked" Value="{Binding Check1, Mode=TwoWay}"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Check2}" Value="True"> 
          <Setter Property="IsChecked" Value="True"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </CheckBox.Style> 
     </CheckBox> 

     <CheckBox Content="Check2" IsChecked="{Binding Check2}"/> 

     <TextBlock Text="{Binding Check1}" Name="uiCheckValue1"/> 
     <TextBlock Text="{Binding Check2}" Name="uiCheckValue2"/> 
    </StackPanel> 

enter image description here Wenn ich checkbox2 überprüfen die CheckBox1 geprüft wird aber Quelle nicht aktualisiert. Wie kann ich die Quelle aktualisieren?

enter image description here

+0

Try "{Binding Check1, Mode = TwoWay]" –

Antwort

1

Es ist leicht einzusehen, warum zu sagen: Sie verlieren die Bindung, wenn Sie IsChecked auf True manuell einstellen.
die DataTrigger löschen und Ihr Ansichtsmodell wie folgt ändern:

public bool Check2{ 
    get { return check2; } 
    set { 
      check2 = value; 
      if (value == true) Check1 = true; 
      NotifyPropertyChanged(); 
     } 
} 
2

Ihr Code scheint falsch zu sein. Sie sollten das Ereignis PropertyChanged ordnungsgemäß ausgeben, um die Ansicht zu aktualisieren. prüfen unten Code:

public class ViewModel : INotifyPropertyChanged 
{  
    private bool check1;  
    public bool Check1 
    { 
     get { return check1; } 
     set 
     { 
      check1 = value; 
      PropertyChanged(value, new PropertyChangedEventArgs("Check1")); 
     } 
    }  

    private bool check2;  
    public bool Check2 
    { 
     get { return check2; } 
     set 
     { 
      check2 = value; 
      PropertyChanged(value, new PropertyChangedEventArgs("Check1")); 
     } 
    } 

    #region Notify 
    ...  
    #endregion 
} 

Auch die Bindung ändern TwoWay

<<CheckBox Content="Check2" IsChecked="{Binding Check2, Mode=TwoWay}"/> 

<DataTrigger Binding="{Binding Check2, Mode=TwoWay}" Value="True"> 
<Setter Property="IsChecked" Value="True" /> 
</DataTrigger>