如何设置itemscontrol到不同ViewModel的绑定
本文关键字:ViewModel 绑定 itemscontrol 何设置 设置 | 更新日期: 2023-09-27 18:10:15
我一直在尝试将列表绑定到我的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。
通过添加绑定源,我的所有命令绑定(连接到另一个项目中的另一个类)不再工作。是否有一种方法可以确保绑定源特定于我正在操作的对象?
在Window的DataContext
的ViewModel
里面添加一个RecentFilesViewModel
的属性
然后,你可以简单地做:
<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>
编辑:基于你最近的编辑,你可以尝试在网格中包装ItemsControl,并将其DataContext设置为RecentFiles。注意,您不必为RecentFiled创建资源/键,只要定义了名称空间,就可以简单地访问它。
<Grid>
<Grid.DataContext>
<ssm:RecentFilesViewModel/>
</Grid.DataContext>
<ItemsControl ItemsSource="{Binding 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>
</Grid>