XAML C# WPF|以程序设计方式变更DisplayMemberPath

anauzrmj  于 2022-12-07  发布在  C#
关注(0)|答案(1)|浏览(275)

我有一个类Person,它有三个属性NameLastNameFullName。我使用MVVM-在ModelView中,我有一个List<Person> Persons
我的观点如下:

<Button Content="LastName" Command="{Binding LastNameCommand, Mode=OneWay}" />
<ListView IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Persons}">
  <ListView.View>
   <GridView>
     <GridView.Columns>
       <GridViewColumn Header="Name"
            DisplayMemberBinding="{Binding Name}" />
       <GridViewColumn Header="FullName"
            DisplayMemberBinding="{Binding FullName}" />
    </GridView.Columns>
   </GridView>
  </ListView.View>
</ListView>

我现在的目标是改变

<GridViewColumn Header="Name"
            DisplayMemberBinding="{Binding Name}" />

<GridViewColumn Header="LastName"
            DisplayMemberBinding="{Binding LastName}" />

当我按下按钮时。
我怎么才能做到呢?

mnemlml8

mnemlml81#

设置或更改GridViewColumnDisplayMemberBinding属性应在视图中完成。
视图模型不应该知道或关心任何DisplayMemberBinding,它只更新源属性(在本例中是NameFullName)。
因此,为视图中的按钮挂接一个事件处理程序,并在其中设置与视图相关的属性:

private void Button_Click(object sender, RoutedEventArgs e)
{
    col1.DisplayMemberBinding = new Binding("path");
}
    • XAML文件:**
<Button Content="LastName" Click="Button_Click" Command="{Binding LastNameCommand, Mode=OneWay}" />
<ListView IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Persons}">
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn x:Name="col1" Header="Name" DisplayMemberBinding="{Binding Name}" />
                <GridViewColumn x:Name="col2" Header="FullName" DisplayMemberBinding="{Binding FullName}" />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

这不会以任何方式破坏MVVM模式。尝试修改视图模型中的DisplayMemberBinding肯定会破坏MVVM模式。MVVM不是要从视图中删除与视图相关的代码。它是要分离关注点。

相关问题