4

ユーザーが WPF TabControl でタブアイテムを選択できないようにする必要がありました。

1)ユーザーがある条件でチェックボックスをチェックしない限り、チェックボックスをチェックするまで、ユーザーはメッセージボックスを表示する必要があり、チェックボックスをチェックすると、他のタブに移動できます

2)特定の条件をチェックすると、ユーザーはそれを選択したときに特定のタブに入ることができなくなり、タブ項目を折りたたむオプションがありません。メッセージボックスがポップアップして、同じ prv タブに戻るはずですアイテムが選択されました

以下のスミス・ジョシュのサンプルコードを見てきましたが、これは私が最初のシーンにまさに望んでいたものです

http://joshsmithonwpf.wordpress.com/2009/09/04/how-to-prevent-a-tabitem-from-being-selected/

しかし、アプリケーションに厳密な「No CodeBehind」があるMVVMで機能するものが必要です

4

2 に答える 2

0

別のタブ項目へのナビゲーションが許可されているかどうかを制御する TabControl を継承する (または添付プロパティを追加する) ことができます。ただし、「コードビハインドなし」はちょっとばかげていることを強調しておきます。コードビハインドを表示専用の目的で使用できる場合はたくさんありますが、それは問題ありません。

問題に戻ります...私の提案を使用して行うことは、実際のビュー(ページ/ウィンドウなど)に含まれないように、コントロール内のコードビハインド(アクションが許可されているかどうかを確認する)を非表示にすることです. 新しいプロパティを DependencyProperty として宣言すると、すべてのバインディング機能などを取得できます。

于 2010-08-27T15:34:33.430 に答える
0

編集:他のコードをテストしましたが、機能しませんでした。とにかく単なるアイデアでした。これは機能する方法です(ただし、ビューを調整するときにMVVMのコードビハインドは問題ないというアレックスに同意します)。

この場合、タブが選択されている場合とタブを変更できる場合の 2 つのブール値を取るコンバーターを作成しました。これらの両方が false に設定されている場合、false を返してタブを無効にします。いずれかが true に設定されている場合は、タブを有効のままにします。

これがコードです。VM に CanChangeTabs というプロパティがあり、Window.Resources に Converter という MyConverter のインスタンスがあります。

XAML inTabItem:

<TabItem.IsEnabled>
    <MultiBinding Converter="{StaticResource Converter}">
        <Binding RelativeSource="{RelativeSource Self}" Path="IsSelected" />
        <Binding Path="CanChangeTabs" />
    </MultiBinding>
</TabItem.IsEnabled>

コンバータ:

public class MyConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        foreach (object value in values)
        {
            if ((bool)value)
            {
                return true;
            }
        }
        return false;
    }

    public object[] ConvertBack(object values, Type[] targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2010-08-27T15:40:32.983 に答える