更改列表视图 (MVVM)

本文关键字:MVVM 视图 列表 | 更新日期: 2023-09-27 18:34:24

我想知道在列表视图中动态显示不同内容的最佳设计是什么。

我想要的是(例如)根据单选按钮,列表视图填充项目(设置 ItemsSource、更改列宽、名称和行信息本身)。

我目前正在做的是动态更改所有列表视图属性。

我想知道是否最好使用多个列表视图(甚至可能作为用户控件),所有这些都位于同一窗口位置并隐藏所有未使用的列表视图。

此外,由于我使用的是 MVVM Light/WPF,因此我希望尽可能轻松地将其连接到 XAML 代码。

更改列表视图 (MVVM)

如果 ItemsSource 中的更改及时发生(或者您希望根据某些条件(如 RadioButton 的 IsChecked 属性)进行更改),则需要反思更改数据模板。 出路是创建数据触发器,它将根据某些条件交换您的数据模板

   <ListView>
        <ListView.Style>
            <Style TargetType="ListView">
                <Setter Property="ItemsSource" Value="{Binding InitalSource}"/>
                <Setter Property="ItemTemplate" Value="{StaticResource InitialDataTemplate}"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=RadioButton, Path=IsChecked}" Value="True">
                        <Setter Property="ItemsSource" Value="{Binding AnotherSource}"/>
                        <Setter Property="ItemTemplate" Value="{StaticResource AnotherDataTemplate}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListView.Style>
    </ListView>

默认情况下,每当 DataTrigger 的条件不再为 true 时,设置器所做的所有更改都将消失,因此,如果单选按钮的 IsCheck 值为 False,则无需添加另一个 DataTrigger。