В Xamarin Forms , у меня есть пользовательское представление с BindableProperty:
public static readonly BindableProperty SelectedItemProperty
= BindableProperty.Create(nameof(SelectedItem), typeof(object), typeof(OneOfNButtons), null,
BindingMode.TwoWay);
Я использую это пользовательское представление на пользовательской странице:
<exodus:OneOfNButtons ItemsSource="{Binding Tabs}" SelectedItem="{Binding SelectedTab, Mode=TwoWay}"/>
Двухстороннее связывание работает как положено.
Теперь я хочу запустить анимацию, которая перемещает весь элемент управления OneOfNButtons до середины страницы, поэтому я могу показывать связанный контент под ним всякий раз, когда изменяется SelectedItem
.То есть это не основной фокус страницы, это внизу.Если пользователь заинтересован в этом, он нажимает любую из кнопок на нем, и половина страницы становится выделенной для этой темы, а ряд кнопок действует как вкладки, прямо над содержимым.
Я понимаю DataTriggers
, но это для определенных значений.Я ищу триггер на любое изменение на SelectedItem
свойство .(Если бы логика принадлежала самому пользовательскому элементу управления, я мог бы добавить код в установщик SelectedItem.)
Это логика, специфичная для страницы, поэтому она принадлежит странице;не является частью пользовательского элемента управления.
Это логика, специфичная для данного пользовательского интерфейса, поэтому она относится к странице, а не к модели представления страницы.
Я написал вопрос как «вызвать метод кода», потому что это техника, которую я хотел бы знать, как делать в целом, даже если эта конкретная ситуация может быть полностью обработана вXAML.
Хотя я также был бы рад узнать, как запустить другой XAML, на любое изменение .
(Если вы знаете технику WPF XAML, это может работают в Xamarin Forms, хотя XAML здесь более ограничен. В частности, Связанные свойства X-Forms не"DependencyProperty" s , поэтому я не знаю, как свойства "chain" .)
Существует несколько вопросов о XAML и привязке данных в SO, но все, что я обнаружил, обсуждают связывание между представлением и моделью или в рамках одного представления (Мне нужно изменить одно представление, чтобы повлиять на содержащее представление), или включить обмен сообщениями между представлениями (вспомогательное представление не знает и не должно знать об этом требовании, поэтому обмен сообщениями неприменимо), илисрабатывание на спецспецифические значения или предназначены для WPF и не поддерживаются в формах Xamarin.