2016-04-07 10 views
0

Ich habe eine Bindung, die nicht funktioniert und anstatt es zu beheben die einzige Art und Weise weiß ich, wie ich besser verstehen, warum es nicht funktioniert und welche Möglichkeiten ich außer der einen Lösung, die ich kenne .WPF CheckBox IsChecked Binding Problem

XAML:

<CheckBox Grid.Row="6" Grid.Column="1" IsChecked="{Binding Path=CurSerialPort.ExpansionEnabled}" Margin="7" VerticalAlignment="Stretch" ToolTip="Select whether DHCP is enabled."> 
    <CheckBox.Style> 
     <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Type CheckBox}}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=CurSerialPort.ShowExpansionEnable}" Value="False"> 
       <Setter Property="Visibility" Value="Collapsed" /> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </CheckBox.Style> 

Ausgabe Bindung:

IsChecked="{Binding Path=CurSerialPort.ExpansionEnabled}" 

Datacontext:

private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.DataContext = main.Model; 
} 

main.Model umfasst:

/// <summary> 
/// The currently selected serial port 
/// </summary> 
public SerialModel CurSerialPort 
{ 
    get { return this.curSerialPort; } 
    set 
    { 
     if (value != null) 
     { 
     this.curSerialPort = value; 
     } 

     RaisePropertyChanged("CurSerialPort"); 
    } 
} 

SerialModel umfasst:

/// <summary> 
/// Expansion Enable 
/// </summary> 
public bool ExpansionEnable 
{ 
    get 
    { 
     return this.expansionEnable; 
    } 
    set 
    { 
     this.expansionEnable = value; 
    } 
} 

gebunden wird, wenn er nicht funktioniert ist. Das Festlegen und Abrufen von ExpansionEnable spiegelt nicht das Kontrollkästchen auf der Seite wider.

Ich weiß, ich könnte nur noch hinzufügen:

public bool CurSerialPortExpansionEnable 
{ 
    get { return CurSerialPort.ExpansionEnable; } 
    set { CurSerialPort.ExpansionEnable = value; } 
} 

zum Modell und die Bindung funktioniert, weil das ist, wie es mit Eigenschaften zum Hauptmodell als Ganze im Zusammenhang getan wurde, obwohl ich mag nicht Ich muss für jedes Objekt, für das wir mehrere Instanzen haben, weitere Eigenschaften hinzufügen und würde gerne eine Lösung finden, bei der die Bindung wie oben beschrieben ist.

Edit: Nicht sicher, was ich geändert habe, aber das funktioniert tatsächlich vollständig. Antwort unten zeigte einen Fehler von mir das RaisePropertyChanged zu vergessen, aber anders scheint alles jetzt gut.

+0

Define funktioniert nicht. Werden die Einstellungen überhaupt aufgerufen? – Paparazzi

Antwort

2

Define funktioniert nicht. Werden die Einstellungen überhaupt aufgerufen?

Versuchen Sie, SerialModel Zugabe

public bool ExpansionEnable 
{ 
    get 
    { 
     return this.expansionEnable; 
    } 
    set 
    { 
     if(this.expansionEnable == value) return; 
     this.expansionEnable = value; 
     RaisePropertyChanged("ExpansionEnable"); 
    } 
} 

NotifyPropertyChanged Wenn oben nicht dann den Stil nehmen funktioniert und sehen, ob das etwas brechen wird.
Aber es sieht gut aus für mich.

+0

Indem es nicht funktionierte, schlug es nicht auf oder wurde gesetzt. Guter Punkt, kann nicht glauben, dass ich die RaisePropertyChecked vergessen habe .... Obwohl es jetzt zufällig funktioniert. Die Sets und die Gets werden aufgebrochen. Ich weiß wirklich nicht, was sich geändert hat, aber aus welchem ​​Grund auch immer. Ich bin froh, dass es jetzt funktioniert, weil ich nicht verstehen konnte, warum. – Birdbuster