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

How invoke a code behind method of page when property change happens in a custom view on the page

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 setter。)

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


我把问题写成 "invoke a code behind method",因为这是我想知道的一般技巧,即使这种特定情况完全可以在 XAML 中处理。
虽然我也很高兴知道如何在 任何更改 .

上触发其他 XAML

(如果您知道 WPF XAML 技术,它 可能 在 Xamarin Forms 中工作,尽管 XAML 在这里更受限制。具体而言,X-Forms 绑定属性 not "DependencyProperty"s,所以我不知道如何 "chain"属性.)

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

您可以用它处理任何 属性 改变的事件。

this.YourControl.PropertyChanged += YourControlPropertyChanged;

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