簡體   English   中英

WPF CheckBox IsChecked綁定問題

[英]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>

綁定問題:

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

DataContext:

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

main.Model包括:

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

      RaisePropertyChanged("CurSerialPort");
   }
}

SerialModel包括:

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

被束縛是行不通的。 ExpansionEnable的設置和獲取未反映頁面上的復選框。

我知道我可以添加:

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

對模型和綁定將起作用,因為這樣做是通過與整個主模型相關的屬性來完成的,盡管我不想為我們擁有多個實例的每個對象繼續像這樣添加單個屬性。確實想找到一種綁定如上所述的解決方案。

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

編輯:不確定我更改了什么,但是實際上確實可以正常工作。 下面的答案指出了我忘記了RaisePropertyChanged的缺點,但除此之外,現在看來一切都很好。

定義不起作用。 集合被調用了嗎?

嘗試將NotifyPropertyChanged添加到SerialModel

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

如果上述方法不起作用,則取出樣式,看看是否有破損。
但這對我來說很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM