如何设置itemscontrol与不同ViewModel的绑定?

时间:2014-06-25 23:39:35

标签: c# wpf mvvm datacontext itemscontrol

我一直在尝试将列表绑定到我的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>

如果我将datacontext设置为整个窗口,我可以显示列表但是这意味着我的所有其他绑定都不起作用。这是唯一需要此视图模型的对象,因此我想将其设置为此ItemsControl的唯一对象。有人可以帮我搞定吗?它正在慢慢地让我疯狂。

编辑:

我目前有这种方式,因为没有其他对象的直接视图模型。我们试图尽可能地将其保持分离,因此没有窗口datacontext。其他一切都很好。我正在使用PRISM和Telerik。

通过添加绑定源,我的所有命令绑定(连接到另一个项目中的另一个类)都不再起作用。有没有办法可以确保我的绑定源保持特定于我操作的对象?

1 个答案:

答案 0 :(得分:0)

在窗口RecentFilesViewModel的{​​{1}}内添加ViewModel的属性。

然后,您可以这样做:

DataContext

编辑:

根据您最近的编辑,您可以尝试将ItemsControl包装在Grid中,并将其DataContext设置为RecentFiles。注意,您不必为RecentFiled创建资源/密钥,只要定义了名称空间,您就可以简单地访问它。

<ItemsControl ItemsSource="{Binding RecentFilesViewModel.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>