я не нашел особенно простой в использовании способ вставлять выражение в XAML, так вот что я использую вместо этого:
BindingOperations.SetBinding(myBtn, Button.IsEnabledProperty, LambdaBinding.New(
new Binding { Source = myObject,
Path = new PropertyPath(ComboBox.SelectedIndexProperty) },
(int selectedIndex) => selectedIndex >= 0
));
Вам нужно написать это на C#, например, в конструкторе окна.
Это также работает легко для мульти-источников привязок:
BindingOperations.SetBinding(myBtn, Button.IsEnabledProperty, LambdaBinding.New(
new Binding { Source = myObject,
Path = new PropertyPath(ComboBox.SelectedIndexProperty) },
new Binding { Source = myObject2,
Path = new PropertyPath(Button.ActualHeightProperty) },
(int selectedIndex, double height) => selectedIndex >= 0 && height > 10.5
));
Заметим, что лямбда статически типизированных, и любые ошибки типа являются (относительно) шумным, помогая отслеживать их вниз. Также учитывается тип возврата лямбда; вы можете использовать это, чтобы привязать ширину одного объекта к сложной формуле на основе ширины другого ...
Этот класс LambdaBinding
не является встроенным; вы должны указать файл .
Сторона примечания. Настоящий позор, который XAML не допускает выражений. Да, я понимаю, что XAML должен быть «для дизайнеров» и без этой неуловимой вещи мы называем прикладной логикой, но кого мы здесь шутим ... Во-первых, DataTrigger
, показанный в другом ответе, в основном условное выражение, и поэтому ничего другого (только намного больше), чем {Binding source.SelectedIndex >= 0}
. Во-вторых, если идея является простотой, тогда выражения привязки, которые должен иметь дизайнер, которые могут писать, намного превосходят возможности не-программиста ... если вам нужны доказательства, подумайте над чем-то вроде этого:
Спасибо, я могу использовать это для одной из моих кнопок, но другой будет где SelectedIndex> = 1. Могу ли я сделать это, как ваш пример выше, но только с помощью MultiDataTrigger? –
MultiDataTrigger используется, когда условия выполняются вместе. Чтобы сделать SelectedIndex> = 1 скопируйте datatrigger для '-1' и измените значение триггера на '0'. –