如何在页面上的自定义视图中发生属性更改时如何调用页面方法后面的代码

时间:2018-05-20 11:56:24

标签: data-binding xamarin.forms datatrigger

Xamarin表单中,我有一个带有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 setter。)

这是特定于页面的逻辑,因此它属于页面;不属于自定义控件。
这是此UI特有的逻辑,因此它属于页面,而不属于页面的视图模型。

我已将问题写成&#34;调用方法背后的代码&#34;,因为这是我想知道如何做的一般技术,即使这个特定情况可以完全处理在XAML中。
虽然我也很高兴知道如何触发其他XAML,任何更改

(如果你知道一个WPF XAML技术,可能在Xamarin Forms中工作,虽然这里的XAML更有限。具体来说, X-Forms绑定属性&#34; DependencyProperty&#34; s ,所以我不知道如何&#34;链&#34;属性。)

有许多XAML&amp;关于SO的数据绑定问题,但是我发现的所有问题都讨论了视图和模型之间的绑定,或者在单个视图中讨论(我需要在一个视图中进行更改以影响包含视图),或者涉及消息传递视图之间(子视图不会也不应该知道此要求,因此消息不适用),或触发特定的值,或者用于WPF和don&#39 ;似乎在Xamarin Forms中受支持。

1 个答案:

答案 0 :(得分:1)

您可以使用此处理任何属性更改事件。

this.YourControl.PropertyChanged += YourControlPropertyChanged;

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