У меня есть следующий стиль, определенный в моем XAML, чтобы включить кнопки только тогда, когда что-то в DataContext имеет измененные (IsDirty = TRUE):WPF DataTrigger, который принимает параметр?
<!-- Style for Buttons to enable based on IsDirty value -->
<Style x:Key="EnableWhenDirtyButtonStyle" TargetType="{x:Type Button}"
BasedOn="{StaticResource ButtonStyle}">
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<!-- Enable button when something has changed -->
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}}, Path=DataContext.IsDirty}" Value="True">
<Setter Property="Button.IsEnabled" Value="true" />
</DataTrigger>
</Style.Triggers>
</Style>
Это работает до тех пор, пока существует только один DataContext в UserControl. Теперь у меня есть ситуация, когда у меня есть 3 разных DataViews, поэтому у меня есть 3 разных значения IsDirty (т. Е. CustomerTableIsDirty, OrderTableIsDirty, OrderDetailTableIsDirty). В этом случае я могу создать три новых * DisableWhenDirtyButtonStyle в UserControl, как:
<Style x:Key="CustomerTableEnableWhenDirtyButtonStyle"
TargetType="{x:Type Button}"
BasedOn="{StaticResource ButtonStyle}">
<Setter Property="Button.IsEnabled" Value="False" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=CustomerTableIsDirty}" Value="true">
<Setter Property="Button.IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
Есть ли способ, чтобы создать DataTrigger такое, что связывание значение может быть передано в стиль в качестве параметра?
В качестве альтернативы, есть способ добавить условия к MultiDataTrigger при наследовании стиля с помощью функции «BasedOn», которая уже определила бы MultiDataTrigger. Например:
<Style x:Key="CustomerTableEnableWhenDirtyButtonStyle"
TargetType="{x:Type Button}"
BasedOn="{StaticResource EnableWhenDirtyButtonStyle}">
<!-- Add the following to existing MultiDataTrigger in EnableWhenDirtyButtonStyle -->
<Condition Binding="{Binding Path=CustomerTableIsDirty}" Value="true" />
</Style>
Я не могу использовать MultiBinding, как этот стиль является частью базового проекта, который привыкает несколькими другими проектами (как DLL). Пользователи этой DLL не смогут обновить стиль, чтобы включить необходимый путь привязки.
Как насчет создания прикрепленного поведения? Что-то вроде описанного здесь (http://www.thomaslevesque.com/2011/10/01/wpf-creating-parameterized-styles-with-attached-properties/). –