2016-04-07 19 views
0

Çalışmamaya neden olan bir bağım var ve bunun nedenini bilmemin tek yolu nasıl çalıştığımı ve neden benim çözümümden başka bir seçeneğim olduğunu anlamak istiyorum .WPF CheckBox IsChecked Binding Issue

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> 

sorun bağlanması:

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

DataContext:

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

main.Model içerir:

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

     RaisePropertyChanged("CurSerialPort"); 
    } 
} 

SerialModel içerir: o çalışmıyor gibi

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

bağlı olmak. ExpansionEnable kümesinin ve ayarının sayfadaki onay kutusunu yansıtmadığı.

Ben sadece ekleyebilirsiniz biliyorum: Model için

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

ve bu bir bütün olarak ana modele ilişkin özellikleri olan nasıl yapıldığı çünkü istemiyorum rağmen çalışacaktır bağlama Birden fazla örneğe sahip olduğumuz her nesne için buna benzer tek özellik eklemeye devam etmeli ve bağlayıcının yukarıdaki gibi olduğu bir çözümü bulmak isteriz.

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

Düzenleme: Ne değiştirdiğime emin değilim, ancak aslında tamamen çalışır. Aşağıdaki cevap, RaisePropertyChanged'ı unutmamın bir kusuruna işaret ediyordu ama bunun dışındaki her şey şu anda iyi görünüyor.

+0

Tanımlama çalışmıyor. Get seti bile çağrıldı mı? – Paparazzi

cevap

2

Tanımlama çalışmıyor. Get seti bile çağrıldı mı? Yukarıdaki sonra işe stilini çıkar ve o şey kırılıyor eğer görmüyorsa

deneyin

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

SerialModel

için NotifyPropertyChanged eklenmesi.
Ama bana iyi görünüyor.

+0

Çalışmamakla ya da ayarlamıyordu. İyi bir nokta, RaisePropertyChecked unuttum inanamıyorum .... Şimdi rastgele çalışmasına rağmen. Setler ve yardımlar bozuldu. Ne değiştiğini ciddi olarak bilmiyorum ama neden her ne sebeple olursa olsun hayatımın sebebi için çalışmamın nedenini anladım. – Birdbuster

İlgili konular