我有一个不起作用的绑定,而不是修复它,我知道如何更好地理解为什么它不起作用以及除了我所知道的解决方案之外还有哪些选择。
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的set和get并不反映页面上的复选框。
我知道我可以添加:
public bool CurSerialPortExpansionEnable
{
get { return CurSerialPort.ExpansionEnable; }
set { CurSerialPort.ExpansionEnable = value; }
}
对模型和绑定将起作用,因为这是与主模型整体相关的属性的完成方式,虽然我不想继续为我们有多个的每个对象添加这样的单个属性实例,并且真的想找到一个解决方案,其中绑定如上所述。
IsChecked="{Binding Path=CurSerialPort.ExpansionEnabled}"
编辑:不确定我改变了什么,但这确实完全有效。下面的回答指出了我忘记了RaisePropertyChanged的一个缺陷,但除此之外现在看起来都很好。