首页 > 解决方案 > 如何在 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>
...

我想在运行时更改数据上下文。怎么做?

标签: c#wpfxaml

解决方案


关于如何更改您的数据上下文的简短答案,Window非常简单明了。

假设您有两个ViewModelsVM1VM2。最初,您已将其VM1设置为DataContextfrom your XAML,并且您希望VM2在按钮单击事件上将其更改为。因此,您要做的就是从后面的代码中设置数据上下文,如下所示:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var vm2 = new VM2();
    DataContext = vm2;
}

但这是一个不同的问题,您为什么要这样做。除非您确定要在运行时更改DataContextaView的 ,否则您不应该这样做。通常,您将 a 绑定ViewModel到 aView并顺其自然。任何更改都考虑到其中的成员变量ViewModel。您可能想阅读更多关于此的内容。


推荐阅读