#c# #.net #wpf #xaml #data-binding
#c# #.net #wpf #xaml #привязка данных
Вопрос:
У меня есть ListView с прикрепленным этим DataTrigger:
<Style x:Key="HideShowStyle" TargetType="{x:Type ListViewItem}">
<Style.Resources>
<localConverters:ShowHideConverter x:Key="ShowHideConverter" />
</Style.Resources>
<Style.Triggers>
<DataTrigger Value="true">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource showHideConverter}">
<Binding Path="EndingDate" />
<Binding Path="UserName" />
<Binding ElementName="SearchBox" Path="Text" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Value="false">
(...)
</DataTrigger>
</Style.Triggers>
</Style>
Я использую это в жестко запрограммированном сценарии, чтобы скрыть / показать некоторые элементы списка в ListView. Источник привязки указан в теге ElementName, а текстовое поле, на которое ссылается, объявлено несколькими строками ранее.
Теперь у меня возникла необходимость изменить эту привязку во время выполнения с помощью другого поля, инкапсулированного в созданный класс. Я пытался использовать класс WPF вместо XAML, но ничего, я понятия не имею, как это получить.
Я открыт для любых советов! 🙂
Ответ №1:
var style = (Style)FindResource("HideShowStyle");
var trigger = (DataTrigger)style.Triggers[0];
var multibinding = (MultiBinding)trigger.Binding;
var binding1 = (Binding)multibinding.Bindings[0];
var binding2 = (Binding)multibinding.Bindings[1];
var binding3 = (Binding)multibinding.Bindings[2];
Измените привязки по желанию.