我有一个WPF应用程序,其主窗口包含两个面板。布局很标准。左侧面板是对象列表。右侧面板显示有关在左侧面板中选择的对象的信息。
现在,我将左侧面板直接放在窗口的XAML中,尽管我认为它应该是其自己的UC / View。右侧面板编码为UC。主窗口的ViewModel的字段是右侧面板的VM(称为属性VM)。属性VM封装了模型中所选对象的数据。
在左侧面板中选择其他对象时,我看到两个选项: 1)实例化属性VM的新实例并从模型中加载相应的数据 2)将模型中的相应数据加载到现有属性VM,并发出适当的更改通知[我当前的实现]
上述两个选项之间是否有优势或首选的处理方式?我是否缺少更好的第三选择? *编辑*也许更好的问题是-两种方法的优缺点是什么?
谢谢!
答案 0 :(得分:1)
上述两个选项之间是否有优势或首选的处理方式?
并非如此,但是仅创建一个新实例并将数据绑定属性设置为此实例,而不是每次单击按钮时都尝试重用和更新现有实例的状态,可能会更简单。
如果需要缓存实例,则可以使用IoC容器或为您解析实例的自定义缓存容器。例如,您可以根据需要将容器设置为始终返回相同类的相同实例或每次返回一个新实例。
但是确实有“首选方式”。您的需求将决定解决特定问题或用例的最佳方法。
答案 1 :(得分:1)
您正在描述MVVM世界中非常标准的方案。我相信您有一个轻微的体系结构问题,当解决该问题时,这个问题将成为现实。您要从中进行选择的“列表”应该已经为包含“对象”又称模型的视图模型的列表。属性视图应该只是数据绑定到所选VM。