c# - 如何在 WPF 应用程序中更新 DataContext?
问题描述
我正在学习 WPF,但遇到了障碍。我有一个带有 Window 的 xaml 文件:
...
<Window.DataContext>
<local:LeaguesViewModel/>
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label VerticalAlignment="Center" HorizontalAlignment="Center" Margin ="20" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" Content="{Binding Path=HeaderText}"/>
<ListView Grid.Column="0" Grid.Row="1" Margin="20" HorizontalAlignment="Center" VerticalAlignment="Center" ItemsSource="{Binding Path=Leagues}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Country" Width="120" DisplayMemberBinding="{Binding Country}"/>
<GridViewColumn Header="Num of teams" Width="120" DisplayMemberBinding="{Binding NumOfTeamsQualifiedToUCL}"/>
</GridView>
</ListView.View>
</ListView>
<TextBox Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Path=SomeText}" />
</Grid>
...
我想在运行时更改数据上下文。怎么做?
解决方案
关于如何更改您的数据上下文的简短答案,Window
非常简单明了。
假设您有两个ViewModel
sVM1
和VM2
。最初,您已将其VM1
设置为DataContext
from your XAML
,并且您希望VM2
在按钮单击事件上将其更改为。因此,您要做的就是从后面的代码中设置数据上下文,如下所示:
private void Button_Click(object sender, RoutedEventArgs e)
{
var vm2 = new VM2();
DataContext = vm2;
}
但这是一个不同的问题,您为什么要这样做。除非您确定要在运行时更改DataContext
aView
的 ,否则您不应该这样做。通常,您将 a 绑定ViewModel
到 aView
并顺其自然。任何更改都考虑到其中的成员变量ViewModel
。您可能想阅读更多关于此的内容。
推荐阅读
- python - NameError:名称“年”未定义
- python - 一组顺序决策的所有可能选项组合
- azure - 使用 IIS 的云服务预热
- java - 永无止境的“Gradle 破坏了类路径”错误
- sas - 我想从 SAS 中的日期时间格式列中提取月份数据
- wordpress - Wordpress 插件无法更新:无法创建目录
- mysql - 如何在 MySQL 查询中显示非零值
- vb.net - how to manage pass value set by dialog box in VB form application to its caller
- github - Github 页面仅适用于第一个存储库,不适用于新项目
- python - 使用 discord.py 在 Flask python 中向用户发送 DM