C# WPF全局变量?

C# WPF全局变量?,c#,wpf,mvvm,global,C#,Wpf,Mvvm,Global,这个问题很难用语言表达,所以如果缺少我的解释,请一定要问 我有一个应用程序,它有几个数据网格,其中包含可编辑对象,例如容器、装运和包裹 现在,这些对象中的每一个(装运、集装箱、包装等)通常需要了解另一个数据网格(例如,包装需要知道在集装箱服务模型中选择了什么集装箱)通常,我会在selectedItem更改时触发事件,并在viewmodels上侦听需要此信息的事件,但最近已进行了更改,需要models了解选择 因此,我的问题是,让一个类包含所有viewmodels中当前选择的所有项目,然后简单地在

这个问题很难用语言表达,所以如果缺少我的解释,请一定要问

我有一个应用程序,它有几个
数据网格
,其中包含
可编辑对象
,例如容器装运包裹

现在,这些对象中的每一个(装运集装箱包装等)通常需要了解另一个
数据网格
(例如,包装需要知道在集装箱服务模型中选择了什么集装箱)通常,我会在
selectedItem
更改时触发事件,并在
viewmodels
上侦听需要此信息的事件,但最近已进行了更改,需要
models
了解选择


因此,我的问题是,让一个类包含所有
viewmodels
中当前选择的所有项目,然后简单地在该类中收听
事件,然后由
viewmodels
和模型使用以了解所选项目,这是“糟糕的做法”还是糟糕的代码明智的做法?(使用
IoC.get
以获取“全局”类的实例)

在我看来,我认为,正如您所说,让模型数据类型类需要了解有关选定项的任何信息是“不好的做法”。我一直认为数据类型类应该只是“数据持有者”,并且功能很少或没有功能。。。这就是视图模型的工作

在您的情况下,我可能会使用一个父视图模型来保存所有集合和属性,以便绑定到每个集合中的选定项。这样,您可以在一个位置处理所有问题。子视图也可以直接绑定到父视图模型,如果这样有助于:

<DataGrid ItemsSource="{Binding DataContext.Shipments, RelativeSource={
    RelativeSource AncestorType={x:Type Views:ParentView}}}" />


发布相关的代码和XAML。这是一大堆代码和XAML,您是否需要查看特定部分?这似乎是一个很好的干净解决方案,我有点担心向数据对象添加功能,但它们可以处理endedit功能,在我的datagrid中,需要该数据对象(如所选容器)上不可用的其他数据才能保存(这是由另一个类处理的,我决定在该类中绑定所选容器,并在保存之前添加信息。不过,您的解决方案总体上听起来肯定要干净得多,我可能会将我的事件系统切换到这种样式。