У меня есть привязка, которая не работает, а не фиксирует ее единственным способом, которым я знаю, как бы я хотел лучше понять, почему он не работает и какие параметры у меня есть, кроме одного решения, которое я знаю ,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, но кроме этого все кажется хорошим сейчас.
Define не работает. Являются ли даже set set? – Paparazzi