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

Если вышеприведенное не работает, тогда уберите стиль и посмотрите, не нарушает ли это что-то.
Но это выглядит хорошо для меня.

Другие вопросы по тегам