C# MVC中视图模型之间的数据传递#
我目前正在尝试创建一个“日志”文本框,该文本框可以在我拥有的多个视图模型(绑定到多个视图)之间获取消息。我已经尝试了用户Blachshma here()描述的方法,但它似乎不起作用 我有三节课。类AViewModel、类BViewModel和类ABViewModel 在其构造函数中使用以下代码将视图绑定到AViewModel:C# MVC中视图模型之间的数据传递#,c#,wpf,mvvm,C#,Wpf,Mvvm,我目前正在尝试创建一个“日志”文本框,该文本框可以在我拥有的多个视图模型(绑定到多个视图)之间获取消息。我已经尝试了用户Blachshma here()描述的方法,但它似乎不起作用 我有三节课。类AViewModel、类BViewModel和类ABViewModel 在其构造函数中使用以下代码将视图绑定到AViewModel: this.InitializeComponent(); this.model = new AViewModel(); this.DataContext = this.mo
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中,我只需要
我的计划是最终使用Multibinding将两个日志连接在一起,但目前我甚至无法使用单视图模型来更新我的字符串。看起来我的容器视图模型ABViewModel没有得到更新,但我真的不明白为什么,但我不完全确定如何修复这个问题
非常感谢您的任何建议
谢谢
编辑:
我调试代码并看到字符串ALog正在更新,但在UI上看不到更改。有关更多信息,请单击连接到类a中的RelayCommand的按钮。此按钮调用方法以连接到COM端口。打开COM端口后,我能够从其他视图模型成功地使用它。日志应该会更新,说明com端口已打开,但我从未在GUI中看到任何添加到日志的文本,即使我可以调试的ALog实例包含添加的文本
我不能将Prism或MVVM light用于此特定项目。“我知道这是因为ABViewModel(我的容器视图模型)没有收到更改通知。”。哦,是吗?这就是你的想法。“它似乎不起作用。”你认为你可以提供更多关于你对ui所做的事情的细节吗,那么会发生什么反应呢?嗨,Ed。我在UI上单击一个按钮,该按钮映射到a类中的中继命令。该按钮仅连接到一个串行端口,然后用它已连接的消息更新日志。我在编写代码时试图简化它。我可以说我已经连接到COM端口,因为我可以使用UI上的其他按钮通过该COM端口进行对话;我将研究在ViewModels之间使用PubSub事件,这样它们就不会紧密耦合。这允许更改和可伸缩性(如果您有依赖于一个事件的不同/额外ViewModels)。我建议查看Prism的EventAggregator(其他库也可用)。先看一下这个示例:“我知道这是因为ABViewModel(我的容器视图模型)没有收到更改通知”。哦,是吗?这就是你的想法。“它似乎不起作用。”你认为你可以提供更多关于你对ui所做的事情的细节吗,那么会发生什么反应呢?嗨,Ed。我在UI上单击一个按钮,该按钮映射到a类中的中继命令。该按钮仅连接到一个串行端口,然后用它已连接的消息更新日志。我在编写代码时试图简化它。我可以说我已经连接到COM端口,因为我可以使用UI上的其他按钮通过该COM端口进行对话;我将研究在ViewModels之间使用PubSub事件,这样它们就不会紧密耦合。这允许更改和可伸缩性(如果您有依赖于一个事件的不同/额外ViewModels)。我建议查看Prism的EventAggregator(其他库也可用)。请查看此示例以开始: