Я создал стиль для своего Expander
элемента управления, который должен отключить расширитель, если он равен false, но он вообще не работает. Мой расширитель постоянно включен, независимо от того, является ли IsCheckedIn истинным или ложным.Невозможно отключить расширитель WPF со стилем
<Style x:Key="CollapseIsCheckedInExpander" TargetType="{x:Type Expander}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsCheckedIn}" Value="False">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
А вот где я устанавливаю стиль моего расширителя в моем DataGrid:
<Expander Expanded="Expander_Expanded" Collapsed="Expander_Expanded" Style="{DynamicResource CollapseIsCheckedInExpander}"/>
У меня есть свойство кода позади, что называется «IsCheckedIn» и я установил значение верно или false в зависимости от того, зарегистрирован ли автомобиль, на котором я зарегистрировался, или нет.
Есть ли что-то, что мне не хватает?
EDIT:
Вот мой класс:
public class TruckItems : INotifyPropertyChanged
{
bool _isCheckedIn;
public bool IsCheckedIn
{
get { return _isCheckedIn; }
set
{
if (_isCheckedIn != value)
_isCheckedIn = value;
OnPropertyChanged("IsCheckedIn");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
А вот пропущено, где я определяю мой IsCheckedIn:
truckItem.TruckCurrentPhase = item.CurrentPhase; //Current value is "Not Started", so the IsCheckedIn value should be false in the code below
truckItem.IsCheckedIn = truckItem.TruckCurrentPhase == "Checked In" ? true : false;
РЕШЕНИЕ
Я обнаружил, что моя проблема заключалась в использовании RowHeaderTempla т.е. По какой-то причине он не забрать мои привязок, но DataGridTemplateColumn сделал ...
Это не работает:
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<Expander Expanded="Expander_Expanded" Collapsed="Expander_Expanded" Style="{StaticResource CollapseIsCheckedInExpander}"/>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
Это делает работу:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Expander Expanded="Expander_Expanded" Collapsed="Expander_Expanded" Style="{StaticResource CollapseIsCheckedInExpander}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
почему вы не используете 'IsCheckedIn'binding не непосредственно в расширитель?! –
@Motivated Я попытался: '', но он все равно включен все время. –
CareTaker22
, поскольку Фабиан рекомендовал использовать 'INotifyPropertyChanged' и проверяет, правильно ли установлен ваш DataContext –