我有一個Person具有三個屬性的類Name,LastName并且FullName. 我使用 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}" />
當我點擊按鈕時。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
設定或更改DisplayMemberBindinga 的屬性GridViewColumn應在視圖中完成。
視圖模型不應該知道或關心任何DisplayMemberBinding. 它只更新源屬性(Name在FullName這種情況下)。
因此,為視圖中的按鈕連接一個事件處理程式并在那里設定與視圖相關的屬性:
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在視圖模型中修改 a 是肯定的。MVVM 并不是要從視圖中消除與視圖相關的代碼。這是關于關注點分離。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506333.html
