MVVM和更新WPF数据网格布局

MVVM和更新WPF数据网格布局,wpf,wpfdatagrid,caliburn.micro,Wpf,Wpfdatagrid,Caliburn.micro,我通过Caliburn Micro使用MVVM。我有一个绑定到视图模型列表的datagrid。我正在后台线程中运行一个进程,该进程一次更新一个datagrid的item viewmodels 一切都很好,数据网格的项目随着每个项目视图模型的更新而实时更新,正如您所期望的那样 一个小问题是:当项目的视图模型更新时,datagrid的布局会被弄乱。例如,如果我将一个项目的状态从“确定”更新为“否”,则会发生一些不好的情况,该列会适当地重新调整大小,但随后的列会缩小,从而模糊其中的内容 如果我刷新整个

我通过Caliburn Micro使用MVVM。我有一个绑定到视图模型列表的datagrid。我正在后台线程中运行一个进程,该进程一次更新一个datagrid的item viewmodels

一切都很好,数据网格的项目随着每个项目视图模型的更新而实时更新,正如您所期望的那样

一个小问题是:当项目的视图模型更新时,datagrid的布局会被弄乱。例如,如果我将一个项目的状态从“确定”更新为“否”,则会发生一些不好的情况,该列会适当地重新调整大小,但随后的列会缩小,从而模糊其中的内容

如果我刷新整个网格,那么所有内容都会得到适当的布局

因为我使用的是MVVM,所以我无法访问datagrid控件本身,因此无法直接使用datagrid的UpdateLayout方法

我可以使用CM的ViewAware视图模型,但这似乎是不必要的


有什么想法吗?

您可以使用事件聚合器发布刷新消息。这样,如果您更改了任何内容,这两个组件仍然是松散耦合的。这确实意味着在您的视图中有一点代码隐藏,但要保持关注点的分离需要付出很小的代价好吧,您正在将一点关注点从视图引入到VM中,但它是不可破坏的,似乎是一个视图特定的问题,可以通过视图特定的代码隐藏完美地解决,这不会破坏MVVM。您还需要帮助解决该问题吗?我可能会为datagrid创建一个行为,该行为将使我能够调用刷新,而无需绑定到该行为的属性\方法,从而不会破坏该模式