【发布时间】:2014-08-16 16:54:05
【问题描述】:
我一直在尝试将列表绑定到我的 ItemsControl 并不断提出绑定问题,所以我来寻求帮助。
到目前为止我的代码是:
...
<ssm:RecentFilesViewModel x:Key="RecentFilesVM" />
...
<ItemsControl ItemsSource="{Binding Source={StaticResource RecentFilesVM}, Path=Files} Margin="0 4 0 0">
<ItemsControl.Template>
<DataTemplate>
<telerik:RadRibbonButton Width="285">
<TextBlock Margin="0 0 0 2" Text="{Binding Path}" />
</telerik:RadRibbonButton>
</DataTemplate>
</ItemsControl.Template>
</ItemsControl>
如果我将数据上下文设置为整个窗口,我可以显示列表,但这意味着我的所有其他绑定都不起作用。这是唯一需要这个视图模型的对象,所以我想将它设置为这个 ItemsControl 的唯一对象。有人可以帮我解决这个问题吗?它慢慢让我发疯。
编辑:
我目前采用这种方式是因为没有其他对象的直接视图模型。我们试图保持尽可能解耦,因此没有窗口数据上下文。其他一切都很好。我正在使用 PRISM 和 Telerik。
通过添加绑定源,我的所有命令绑定(连接到另一个项目中的另一个类)不再起作用。有什么方法可以确保我的绑定源保持特定于我正在操作的对象?
【问题讨论】:
-
为什么需要保持 ViewModel 与 View 解耦?
-
我们的目标是让软件尽可能的解耦。我们制作了很多类似的应用程序,因此我们希望能够在多个地方轻松使用代码,而无需过多的返工。通过保持解耦,我们可以轻松地说“嘿,这是我们的标准外壳”并复制项目,然后将其连接到其他软件项目中的其他组件。
-
但是当你把ViewModel和View解耦的时候,是不是就失去了MVVM模型的特点或者优势呢?如果你想解耦这部分,你会在 View 中引入 shell?
-
那是我没有真正解释过的东西。我们有我们的主视图(我们称之为应用程序),然后我们有这个称为外壳的视图。然后将外壳注入主视图。 shell 中没有任何功能。任何具有功能的东西都与其他东西绑定:例如。命令位于另一个项目中,该项目绑定使用标记扩展(x:静态命令:appcomands.savecommand)。
-
我开始更多地了解你的编程模型,因为这是我第一次听到这个模型。如果一切都清楚,您需要将 List 创建到 xmal 中,并且在此视图(或 xmal)中您需要将此列表与 StaticResource 绑定,不是吗?
标签: c# wpf mvvm datacontext itemscontrol