我目前正在尝试创建一个“日志”文本框,它可以在我拥有的多个视图模型(绑定到多个视图)之间获取消息。我在这里尝试过用户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。