Как вызвать код позади метода страницы, когда изменение свойства происходит в пользовательском представлении на странице - PullRequest
0 голосов
/ 20 мая 2018

В 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.

1 Ответ

0 голосов
/ 20 мая 2018

С этим можно обрабатывать любые события, измененные свойством.

this.YourControl.PropertyChanged += YourControlPropertyChanged;

private void YourControlPropertyChanged(object sender,PropertyChangedEventArgs e)
{
      if(e.PropertyName == "SelectedItem")
      {
       //Code
      }
}
...