Предупреждение:
Совершенно новый для ReactiveUI.Попытка полностью использовать RxUI с целью никогда не устанавливать DataContext представления.Я считаю, что это можно сделать!
Сценарий:
У меня есть кнопка, и у кнопки есть стиль, и стиль этой кнопки имеет MultiDataTrigger с первым условием IsMouseOver и вторым условиемсвойство на моей ViewModel типа bool.Это затем меняет фон или передний план кнопки.Традиционно, вы просто привязали бы это второе условие к свойству ViewModel.
Есть ли реальный способ для этого взаимодействия работать без использования DataContext, но при этом иметь ожидаемый результат?Я не могу напрямую получить доступ к условной привязке, поскольку у нее нет имени.Так что должна быть какая-то странная настройка, чтобы заставить это работать.
Решение на самом деле не фанат:
Я мог бы потенциально добавить элемент управления, который не отображается, дать емуимя и используйте this.OneWayBind (), чтобы связать это свойство со свойством IsEnabled этого элемента управления.При этом мое второе условие MultiDataTrigger кнопки могло тогда использовать привязку, основанную на ElementName и его пути IsEnabled.Это позволило бы мне НЕ использовать DataContext, но, на мой вкус, кажется слишком «хакерским».Должен быть другой путь!
Заранее спасибо!
Редактировать 1 - Попытка 1 на основе комментария Гленна Уотсона к сообщению
this.WhenActivated(disposables =>
{
this.WhenAnyValue(x => x.TheButton.IsMouseOver, x => x.ViewModel.SomeBoolValue).Subscribe(x =>
{
if (!x.Item1)
TheButton.Background = x.Item2 ? Brushes.Gray : Brushes.Blue;
else
TheButton.Background = x.Item2 ? Brushes.Red : Brushes.Green;
}).DisposeWith(disposables);
});
Редактировать 2 - реализовано / с использованием ответа Гленна Уотсона.