WPF CheckBox IsChecked Привязка Проблема
У меня есть привязка, которая не работает, и вместо того, чтобы исправлять ее, я знаю, как мне хотелось бы лучше понять, почему она не работает и какие у меня есть варианты, кроме одного решения, которое я знаю.
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, но в остальном все кажется хорошим сейчас.
1 ответ
Определить не работает. Вызывается ли get set?
Попробуйте добавить NotifyPropertyChanged в SerialModel
public bool ExpansionEnable
{
get
{
return this.expansionEnable;
}
set
{
if(this.expansionEnable == value) return;
this.expansionEnable = value;
RaisePropertyChanged("ExpansionEnable");
}
}
Если вышеприведенное не работает, тогда уберите стиль и посмотрите, не нарушает ли это что-то.
Но это выглядит хорошо для меня.