0

我有一个不起作用的绑定,而不是修复它,我知道我想如何更好地理解它为什么不起作用以及除了我知道的一个解决方案之外我还有哪些选项。

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}"

数据上下文:

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");
   }
}

系列型号包括:

/// <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 的​​一个缺陷,但除此之外,现在一切似乎都很好。

4

1 回答 1

2

定义不起作用。甚至被调用了吗?

尝试将 NotifyPropertyChanged 添加到 SerialModel

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

如果上述方法不起作用,则取出样式,看看是否破坏了某些东西。
但它对我来说看起来不错。

于 2016-04-07T16:35:42.157 回答