c# - 使用 NotificationBase 的数据绑定(bind)问题

标签 c# xaml mvvm data-binding uwp

Custom_View.xaml

    <UserControl>
        <local:Custom_Text_Field
            Custom_Text_Field_Color="{x:Bind ViewModel.Color1 , Mode=TwoWay}">
        </local:Custom_Text_Field>
        <local:Custom_Text_Field
            Custom_Text_Field_Color="{x:Bind ViewModel.Color2 , Mode=TwoWay}">
        </local:Custom_Text_Field>
        <Button Click="{x:Bind ViewModel.ChangeColor"/>
    </UserControl>

Custom_View.cs

    public sealed partial class Custom_View : UserControl
    {
        public Custom_View_VM ViewModel { get; set; }
        public Custom_View()
        {
            ViewModel = new Custom_View_VM();
            this.InitializeComponent();
        }
    }

Custom_View_VM.cs

    public class Custom_View_VM : NotificationBase
    {
        public Brush Color1 { get; set; }
        public Brush Color2 { get; set; }
        public void  ChangeColor{//change color1 or color2};
    }

我使用了这个例子中的 NotificationBase 类:https://blogs.msdn.microsoft.com/johnshews_blog/2015/09/09/a-minimal-mvvm-uwp-app/

如果我在构造函数中影响 Color1 或 Color2 的值,它会起作用(更改 View ),但在调用 ChangeColor 后, View 模型中的值会更改,但不会影响 View 。

最佳答案

要更新 UI,它应该接收 PropertyChanged 事件。您应该使用 NotificationBase 的机制来设置属性,这也会引发 PropertyChanged 事件:

public class Custom_View_VM : NotificationBase
{
    private Brush color1;
    public Brush Color1 
    {
        get { return color1; }
        set { SetProperty(color1, value, () => color1 = value); }
    }
    // TODO: same here
    public Brush Color2 { get; set; }
    public void  ChangeColor{//change color1 or color2};
}

此外,颜色通常不会进入ViewModelsViewModel 应该有一些业务逻辑属性,您可以根据 XAMLTextBox 设置颜色,例如 IsNameAvailable .

关于c# - 使用 NotificationBase 的数据绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218701/

相关文章:

c# - 在 MVVM 场景中,我应该如何轮询数据库表以获取 'live' View ?

c# - 在多线程中使用 WebBrowser 时出现访问冲突

ios - iOS 上的 Xamarin.Forms ListView ViewCell 问题

.net - 不同类型的用户控件的 WPF 列表

wpf - 如何在 MVVM WPF 中从子级更改父级控件?

.net - 使用 IDataErrorInfo 和 MVVM 模式问题进行数据验证

c# - 不失真失真参数

c# - 为什么这行得通?

c# - .NET 中的异步消息传递

XAML Columndefinitions 宽度 * 不占用可用空间