在MVVM C#

时间:2016-08-11 23:06:05

标签: c# wpf mvvm

我目前正在尝试创建一个“日志”文本框,它可以在我拥有的多个视图模型(绑定到多个视图)之间获取消息。我在这里尝试过用户Blachshma描述的方法(Multiple Data Contexts in View),但它似乎没有用。

我有三节课。类AViewModel,类BViewModel和类ABViewModel。

A的视图在其构造函数中使用以下代码绑定到AViewModel:

this.InitializeComponent();
this.model = new AViewModel();
this.DataContext = this.model;

B和AB的视图遵循相同的模式。

班级结构如下:

public class A : INotifyPropertyChanged
{
    private string log = string.empty;

    public class A()
    {
    }

    public string ALog
    {
        get
        {
            return this.log;
        }

        set
        {
            this.log = value;
            this.NotifyPropertyChanged("ALog");
        }
    }

    private void NotifyPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    /* Function that executes when relay command is clicked */
    private void ExecuteCommand()
    {
       this.ALog += "here";
    }
}

B类与属性BLog

的定义方式相同

ABViewModel类具有每个其他视图模型的属性

public class ABViewModel
{
    public AViewModel AVM
    {
        get;
        set;
    }
    public BViewModel BVM
    {
        get;
        set;
    }
}

在xaml我只是 <TextBox Text="{Binding ABViewModel.AVM}" />

我的计划是最终使用Multibinding将两个日志连接在一起,但目前我甚至无法获得一个View Model来更新我的字符串。看起来我的容器视图模型ABViewModel没有得到更新,但我真的不明白为什么,但我不完全确定如何解决这个问题。

非常感谢任何建议!

谢谢!

编辑: 我调试我的代码并看到我的字符串ALog正在更新,但我没有在UI上看到更改。有关更多信息,请单击连接到A类中的RelayCommand的按钮。此按钮调用连接到COM端口的方法。打开后,我可以成功使用其他视图模型的COM端口。该日志应该更新说com端口已打开,但我从未看到任何文本添加到GUI中的日志,即使我可以通过调试的ALog实例添加了文本。

我不能在这个特定项目中使用Prism或MVVM-light。

0 个答案:

没有答案