UWP属性在用户控件的依赖属性中更改

时间:2017-04-28 04:03:51

标签: mvvm uwp dependency-properties

我使用用户控件绑定依赖项属性中的值。 但问题是,当我尝试更改值时,UI不会更新。 我在用户控件中的XAML代码:

<TextBox Text="{x:Bind Text}" />

和C#

 public event PropertyChangedEventHandler PropertyChanged;


    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value);
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                    new PropertyChangedEventArgs("Text"));
            }
        }
    }

    // Using a DependencyProperty as the backing store for Text.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(string), typeof(Control1), new PropertyMetadata(null));

当我想使用它时:

        <local:Control text="{Binding Val,Mode=TwoWay}" />

我的ViewModel:

public event PropertyChangedEventHandler PropertyChanged;
    private string _val;
    public string Val
    {
        get
        {
            return _val;
        }

        set
        {

            if (_val != value)
            {_val = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this,
                        new PropertyChangedEventArgs("Val"));
                }
            }
        }

    }

当我想在我的视图中使用它并从视图模型绑定它时,属性更改不适用于用户控件。

1 个答案:

答案 0 :(得分:4)

对于x:bind默认模式是一次,您应该将模式更改为OneWay。

<TextBox Text="{x:Bind Text,Mode=OneWay}" />

您不应该在SetValue(TextProperty, value);中编写代码,并且不应该在依赖项属性中使用Notify,因为依赖项可以自动调用已更改。

请参阅:Dependency Properties