Предполагая, что вы используете модель представления, например ViewModel, вы должны напрямую связать данные вместо элементов пользовательского интерфейса.
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding FirstName}" Value="{x:Null}" />
<Condition Binding="{Binding MiddleName}" Value="{x:Null}" />
<Condition Binding="{Binding LastName}" Value="{x:Null}" />
</MultiDataTrigger.Conditions>
<Setter Property="Button.IsEnabled" Value="False" />
</MultiDataTrigger>
</Style.Triggers>
При этом, если вы используете модель представления, вы можетевсегда добавляйте bool
свойство «EnableSave» и обрабатывайте там всю логику представления, а не в самом представлении.
update
Как видно из комментариев, я ошибочно установил этодо включения Button
, когда любой TextBox
имеет значение, но требуется, чтобы Button
был включен, когда все TextBox
es имеют значения.
Концептуально все, что вам нужно сделать, это изменить условия - вместо «ложь, если все условия ложные», мы хотим «истина, если все условия истинны».
Подвох в том, что нетспособ сказать "не нуль" в XAML - никоим образом без IValueConverter
, то есть.Я бы создал NullToBoolConverter
, который возвращает false
для null
и true
для != null
.
Учитывая такой конвертер:
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding FirstName,
Converter={StaticResource NullToBoolConverter}}" Value="True" />
<Condition Binding="{Binding MiddleName,
Converter={StaticResource NullToBoolConverter}}" Value="True" />
<Condition Binding="{Binding LastName,
Converter={StaticResource NullToBoolConverter}}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Button.IsEnabled" Value="True" />
</MultiDataTrigger>
</Style.Triggers>