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}"
数据上下文:
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 的一个缺陷,但除此之外,现在一切似乎都很好。
定义无效。 get set 甚至被调用了吗?
尝试将 NotifyPropertyChanged 添加到 SerialModel
public bool ExpansionEnable
{
get
{
return this.expansionEnable;
}
set
{
if(this.expansionEnable == value) return;
this.expansionEnable = value;
RaisePropertyChanged("ExpansionEnable");
}
}
如果上述方法不起作用,请取出样式,看看是否有问题。
不过我觉得还不错。
我有一个绑定不起作用,而不是修复它我知道的唯一方法我想更好地理解为什么它不起作用以及除了我知道的一个解决方案之外我还有什么选择。
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");
}
}
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 的一个缺陷,但除此之外,现在一切似乎都很好。
定义无效。 get set 甚至被调用了吗?
尝试将 NotifyPropertyChanged 添加到 SerialModel
public bool ExpansionEnable
{
get
{
return this.expansionEnable;
}
set
{
if(this.expansionEnable == value) return;
this.expansionEnable = value;
RaisePropertyChanged("ExpansionEnable");
}
}
如果上述方法不起作用,请取出样式,看看是否有问题。
不过我觉得还不错。