在 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中受支持。
答案 0 :(得分:1)
您可以使用此处理任何属性更改事件。
this.YourControl.PropertyChanged += YourControlPropertyChanged;
private void YourControlPropertyChanged(object sender,PropertyChangedEventArgs e)
{
if(e.PropertyName == "SelectedItem")
{
//Code
}
}