我做了一个非常简单的Yes / No RadioBox控件。
在它背后的代码中,我有以下BindableProperty
:
public static readonly BindableProperty SelectedValueProperty = BindableProperty.Create(
"SelectedValue",
typeof(int),
typeof(YesNoView),
0,
BindingMode.TwoWay);
它的财产:
public int SelectedValue
{
get { return (int) GetValue(SelectedValueProperty); }
set { SetValue(SelectedValueProperty, value); }
}
此属性使用以下内容绑定在ContentView-XAML中:
<DataTrigger Binding="{Binding SelectedValue}" Value="0" TargetType="Image">
<Setter Property="Source" Value="radiobutton_checked.png" />
</DataTrigger>
每当我在某个页面中使用ContentView并将SelectedValue
设置为常量值时,一切正常!
但是,当我使用{Binding SomeValue}
而不是常量值时,SomeValue
是我在使用ContentView的页面上的属性(带有通知)时,它只会拒绝执行任何东西。每当我将SomeValue
设置为某个值时,它就永远不会到达ContentView,它会让我感到疯狂,为什么它不起作用。
即使我调整BindableProperty也指定了propertyChanged事件,除非我恢复到Xaml中的常量值而不是绑定,否则它永远不会被触发。
有人能说清楚为什么会发生这种情况并且没有像我期望的那样发挥作用吗?
编辑:我应该在Page和View中添加它,将BindingContext设置为此。
答案 0 :(得分:29)
我在浪费了4个小时之后想出来了......
永远不要在ContentView中执行BindingContext = this;
,因为它会从页面尝试数据绑定到它来劫持上下文。而是使用Content.BindingContext = this;