4

「OFFLINE」と「ONLINE」という2つのタブを持つWPFタブコントロールがあります。「ONLINE」タブをクリックしたとき、アプリケーションがオンライン状態かどうかを確認する必要があります.(状態!=オンライン)の場合は、エラーメッセージを表示して「ONLINE」(2番目)タブを表示させないようにし、「OFFLINE」タブに移動します.

VIEW.XAML

 <TabControl Name="dashboardTabControl" SelectedIndex="{Binding SelectedTabIndex,Mode=TwoWay}">
        <TabItem Header="Local Dashboard">
            <views:OfflineDashboard DataContext="{Binding OfflineDashboardViewModel}"/>
        </TabItem>
        <TabItem Header="Online Dashboard">
            <views:OnlineDashboard DataContext="{Binding OnlineDashboardViewModel}"/>
        </TabItem>
    </TabControl>

ビューモデル

       public int SelectedTabIndex
        {
            get
            {
                return this.selectedTabIndex;
            }

            set
            {
                if (value == 1 && !applicationData.IsApplicationOnline())
                {
                    this.SelectedTabIndex = 0;
                }
                else
                {
                    this.selectedTabIndex = value;
                }

                // TODO : According to the selected tab index , populate ONLINE/OFFLINE 
viewmodels

NotifyPropertyChange("SelectedTabIndex");
            }
        }

質問: ステータスを確認し、タブを 0 に設定しましたが、機能しません。常に 2 番目のタブをクリックすると、ONLINE タブが表示されます。

4

3 に答える 3

2

最後に、私の問題の解決策を見つけました:

XAML

<TabControl Name="dashboardTabControl"  Margin="0,5,0,0" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <TabItem Header="Local Dashboard" IsSelected="{Binding IsOnline,Converter={StaticResource invertBoolConverter}}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Top">
                    <views:OfflineDashboard DataContext="{Binding OfflineDashboardViewModel}"/>
                </TabItem>
                <TabItem Header="Online Dashboard" IsSelected="{Binding IsOnline}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Top">
                    <views:OnlineDashboard DataContext="{Binding OnlineDashboardViewModel}"/>
                </TabItem>

現在IsSelected、代わりにTabItemのプロパティを使用していますSelectedIndex

ビューモデル

public bool IsOnline
        {
            get
            {
                return isOnline;
            }
            set
            {
                // When ONLINE tab click, check whether application is online,
                // if not, do not display ONLINE tab
                if (value && !applicationData.IsApplicationOnline())
                {
                    isOnline = false;
                    return;
                }
                else
                {
                    isOnline = value;
                }

                LoadTabContent();

                NotifyPropertyChange("IsOnline");
            }
        }

これで私の問題は解決しました。

于 2013-06-03T14:00:20.247 に答える
2

私はこれを逆にします。

ViewModel でネットワークの変更をリッスンし、bool プロパティを Online に公開します。

Tabpages の Enabled プロパティをこの bool にバインドします。

そうすれば、ViewModel を UI コードで汚染することはありません。

于 2013-05-31T08:34:28.533 に答える
0

にINotifyPropertyChangedを実装する必要がありますViewModel。ビューを変更した後SelectedTabIndex、タブ コントロールの選択されたインデックスが のPropertyChangedイベントを介して変更されたことを通知しますINotifyPropertyChanged

そしてあなたのXAMLで

SelectedIndex="{Binding SelectedTabIndex,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}
于 2013-05-31T08:21:42.553 に答える