简体   繁体   English

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

[英]How to update bindings when TabItem is selected? WPF

I had the following code我有以下代码

<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>

Where UpperPanelControl is a control with buttons that changes ShownViewModel in MainViewModel .其中UpperPanelControl是一个带有按钮的控件,可更改MainViewModel中的ShownViewModel For design purposes I decided to change this all to TabControl (there was a requirement from customer to have buttons):出于设计目的,我决定将其全部更改为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>

It looks nicer, but the problem is when I switch tab the data in the tab is not updated.它看起来更好,但问题是当我切换选项卡时,选项卡中的数据没有更新。 Are there any chance to get this working with TabControl with updating bindings, when tab is changed?更改选项卡时,是否有机会将此与更新绑定的TabControl一起使用?

Each TabItem has an IsSelected property.每个TabItem都有一个IsSelected属性。 You can bind that in your View Model and take the appropriate action.您可以在您的视图 Model 中绑定它并采取适当的操作。

<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();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM