1

Caliburn.Micro を使用するように WPF アプリを書き直しています。このアプリは、フォルダーを表示し、それらのフォルダー内のファイルを表示するメニュー システムです。問題は、ユーザーが追加オプションを許可する「管理者」モードに切り替えることを許可する必要があることです。私は現在、FolderView と FileView をそれぞれの ViewModels と共に持っています。UI を変更して追加オプションを有効にできるように、個別の FolderAdminView と FileAdminView を用意することを考えていました。問題は、ユーザーがモードを変更したときに 2 つを切り替えることです。

FolderViewModel と FileViewModel の両方を同時に読み込むことができるため、 への呼び出しDeactivateItem(ActiveItem, true);は戻るボタンとして機能し、フォルダー ビューに戻ります。

また、主な違いは UI であるため、FolderViewModel から FolderAdminViewModel に値を継承したいと考えています。

WindowManager でアイテムを交換する簡単な方法、またはこれを完全に行う簡単な方法はありますか? ViewModel は 1 つですが、View は 2 つにできますか? 両方のテンプレートを 1 つのビューに表示し、そこで正しいものを選択する方法はありますか?

4

2 に答える 2

2

ViewModel に IsAdmin プロパティを設定して、管理者のみの項目の可視性を .xml を使用してバインドすることはできませんBooleanToVisibilityConverterか?

ビューモデル

public bool IsAdmin
{
    get
    {
        //What ever you do to work out if user is admin 
        //omitted any INotifyPropertyChanged gubbins
    }
}

Xaml

<StackPanel Visibility="{Binding IsAdmin,Converter={StaticResource BooleanToVisibiltyConverter}}"></StackPanel>

コンバータ

public sealed class BooleanToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var flag = false;
            if (value is bool)
            {
                flag = (bool)value;
            }
            else if (value is bool?)
            {
                var nullable = (bool?)value;
                flag = nullable.GetValueOrDefault();
            }
            if (parameter != null)
            {
                if (bool.Parse((string)parameter))
                {
                    flag = !flag;
                }
            }
            return flag ? Visibility.Visible : Visibility.Collapsed;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var back = ((value is Visibility) && (((Visibility)value) == Visibility.Visible));
            if (parameter != null)
            {
                if ((bool)parameter)
                {
                    back = !back;
                }
            }
            return back;
        }
    }
于 2013-04-08T15:31:53.287 に答える
0

'context' 添付プロパティを使用して、読み込まれたビューのコンテキストを指定できます。

<ContentControl x:Name="SomeSubViewModel" cal:View.Context="SomeContext" />

CM はToString()コンテキスト オブジェクトで使用して、ビューの解決中に型名を構築するために使用する値を取得します。View.Contextこれは、同じビューモデルに対して複数のビューを持つことができることを意味し、ユーザーが管理モードにあるときに、プロパティをバインドすることで追加の機能を追加できます。

ビューモデルで非表示にする各アイテムのバインディングを作成し、コンバーターを使用してユーザーがログインしているかどうかを確認することもできます-明らかに、XAMLを2つのビューで複製するか、単一のビューを使用するかによって異なります領域を非表示/表示する条件ロジック

コンテキストプロパティを読んでください:

http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions&referringTitle=ドキュメント

上記のリンクにはいくつかの例があります(最初のいくつかのセクションで)

そしてここ:

http://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition

同じViewModelセクションの複数のビューで

于 2013-04-08T16:10:37.460 に答える