【问题标题】:BindableProperty in ContentView not workingContentView 中的 BindableProperty 不起作用
【发布时间】:2016-10-12 02:23:08
【问题描述】:

我做了一个非常简单的 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 中的常量值,而不是绑定。

任何人都可以解释为什么会发生这种情况并且没有按我的预期工作吗?

编辑:我应该在页面和视图中添加 BindingContext 设置为此。

【问题讨论】:

    标签: c# xaml xamarin xamarin.forms


    【解决方案1】:

    总共浪费了 4 个小时后才弄明白...

    永远不要在 ContentView 中使用BindingContext = this;,因为它会劫持页面中的上下文,试图对其进行数据绑定。而是使用Content.BindingContext = this;

    【讨论】:

    • 纯粹出于好奇:您能解释一下“劫持上下文”是什么意思吗?为什么这是个问题?
    • 或使用Source 参数进行绑定。
    • @Sven-MichaelStübe:页面使用 ContentView 设置其BindingContext,然后将用于所有子元素,包括自定义ContentView。如果再次在内容视图中设置上下文,则会覆盖它。
    • 老兄,你把我从周末的工作中拯救了出来。非常感谢。
    • @JonathanPeel 已经很久了,但当时我看到无数人像我一样做类似事情的例子,其中一个就是这样做的。所以出于绝望,我只是试了一下,瞧:我现在有一个非常流行的 Q/A 风格问题,关于 SO:P
    猜你喜欢
    • 2017-12-27
    • 2021-03-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多