选择 TabItem 时如何更新绑定? WPF

问题描述

我有以下代码

<mah:MetroWindow x:Class="NeoTec.SprayMachine.WPF.MainWindow"
        namespaces bla bla>

    <Window.Resources>
        <DataTemplate DataType="{x:Type viewmodels:CompanyDatabaseViewviewmodel}">
            <controls:CompanyDatabaseViewControl/>
        </DataTemplate>

        <DataTemplate DataType="{x:Type viewmodels:UserDatabaseViewviewmodel}">
            <controls:UserDatabaseViewControl/>
        </DataTemplate>
        
        <DataTemplate DataType="{x:Type viewmodels:Parametersviewmodel}">
            <controls:ParamatersControl/>
        </DataTemplate>

        <DataTemplate DataType="{x:Type viewmodels:Settingsviewmodel}">
            <controls:SettingsControl/>
        </DataTemplate>
    </Window.Resources>

    <Grid>
        <Grid.RowDeFinitions>
            <RowDeFinition Height="40"/>
            <RowDeFinition/>
        </Grid.RowDeFinitions>

        <controls:UpperPanelControl HorizontalAlignment="Center"/>
        <ContentControl Grid.Row="1" Content="{Binding Shownviewmodel}"/>
    </Grid>
</mah:MetroWindow>

其中 UpperPanelControl一个带有按钮的控件,可以在 Shownviewmodel 中更改 Mainviewmodel。出于设计目的,我决定将其全部更改为 TabControl(客户要求有按钮):

<mah:MetroWindow x:Class="NeoTec.SprayMachine.WPF.MainWindow"
        namespaces bla bla>
    <TabControl>
        <TabItem Header="Company Database">
            <controls:CompanyDatabaseViewControl DataContext="{Binding CompanyDatabaseviewmodel}"/>
        </TabItem>
        <TabItem Header="User Database">
            <controls:UserDatabaseViewControl DataContext="{Binding UserDatabaseviewmodel}"/>
        </TabItem>
        <TabItem Header="Parameters" IsSelected="{Binding ParametersTabSelected}">
            <controls:ParamatersControl DataContext="{Binding Parametersviewmodel}"/>
        </TabItem>
        <TabItem Header="Settings">
            <controls:SettingsControl DataContext="{Binding Settingsviewmodel}"/>
        </TabItem>
        <TabItem Header="Info">
            <controls:InfoControl/>
        </TabItem>
    </TabControl>
</mah:MetroWindow>

看起来更好,但问题是当我切换选项卡时,选项卡中的数据没有更新。当标签更改时,是否有机会使用更新绑定使用更新绑定?

解决方法

每个 TabItem 都有一个 IsSelected 属性。您可以将其绑定到您的视图模型中并采取适当的措施。

<TabItem Header="Company Database" IsSelected="{Binding CompanyDataBaseTabIsSelected}">
    <controls:CompanyDatabaseViewControl DataContext="{Binding CompanyDatabaseViewModel}"/>
</TabItem>

private bool _companyDatabaseTabIsSelected;
public bool CompanyDatabaseTabIsSelected
{
    get { return _companyDatabaseTabIsSelected; }
    set
    {
        _companyDatabaseTabIsSelected = value;
        _companyDatabaseViewModel.Refresh();
    }
}