如何设置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。

通过添加绑定源,我的所有命令绑定(连接到另一个项目中的另一个类)不再工作。是否有一种方法可以确保绑定源特定于我正在操作的对象?

如何设置itemscontrol到不同ViewModel的绑定

在Window的DataContextViewModel里面添加一个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>