【发布时间】:2018-02-23 07:23:48
【问题描述】:
我有一个使用 MVVM Light 的 WPF 应用程序。
一个 MainView (+ MainViewModel) 和一个用户控件 (+ UCViewModel)。
该应用程序将有一个带有 2 个选项卡项的选项卡控件。
每个选项卡都有一个用户控件(相同的用户控件)。
用户控件作业:加载文件的内容,显示内容(并允许用户将其导出到其他格式)。
当应用程序启动时,我将读取一个配置文件并将文件位置(来自配置文件)传递给每个用户控件(例如:File1Path、File2Path)。
我可以使用 MVVM Light Messenger.Default.Send 来完成这项工作(从 MainViewModel 到 UCViewModel)。
我的问题是:如何区分哪个用户控件将获取哪个文件路径?
我在ViewModelLocator 中使用SimpleIoc.Default.Register 来注册我的MainViewModel 和UCViewModel。
在注册时,我还没有 Config 文件中的数据,因此无法将其传递给 UCViewModel。
对我的问题有任何意见/解决方案吗?
【问题讨论】:
-
在您设置 id 的位置创建新消息。 Id=1 将是 view1 的文件,Id=2 将是 id=2 的文件。或使用现有消息并发送 $"{filepath}, {id}"
-
@Marco,感谢您的建议。我也是这样想的。但是我的 UserControl ViewModel 只有一个,但 UserControl 出现在两个地方。如果我发送这样的 Id,两个 UserControl ViewModel 都会收到它,并且在那个 ViewModel 中,我不知道如何区分它。 (如果我理解错误,请纠正我)。
-
每个文件都需要一个用户控件实例。这是肯定的。您可以简单地向视图模型的构造函数添加一个 id。就是这样。 id 将与消息的 id 匹配。
-
你的意思是,我应该使用 MainViewModel 为每个用户控件创建实例,而不是使用 ViewModelLocator 吗? (抱歉这么多问题,我还在学习这个 MVVM Light 的阶段。)
-
为什么不在 MainViewModel 中创建两个 UCViewModel 属性并与它们交互而不是发送消息?如果 TabControl 将始终包含两个 TabItem,则该数字无论如何都不是动态的,并且您知道总会有两个子 UC。
标签: c# wpf user-controls mvvm-light