1

ユーザーが認証されているかどうかを示すブール型のプロパティを含む ViewModel があります。

プロファイルのコレクションにバインドされている WrapPanel があります。これらのプロファイルの DataTemplate にはアイコンがあります。つまり、ユーザーが認証されていない場合は閉じた南京錠、ユーザーが認証されている場合は開いた南京錠です。理想的には、これらは ViewModel の Boolean にバインドされますが、テンプレートの DataContext は個々のプロファイル オブジェクトです。

私が試してみました、

  • Windows Phone 7 はサポートしていないように見えますが、ここで指定されSourceているようにバインディングでセレクターを設定しますx:Reference
  • ここで説明されている Inversion of Control(?) メソッドも試しました(ただしcontainerLocator、オブジェクトには見つかりませんでした)
  • を適用しようとしましたStyle.Triggerが、これらは Windows Phone 7 ではサポートされていません
  • Imageまた、コード ビハインドで XAML 要素にアクセスし、イベント トリガーでプログラムによって更新しようとしましたが、DataTemplate 内の要素のハンドルを取得できませんでした。
4

2 に答える 2

0

コメント後に編集: WP7 はスタイル トリガーをサポートしていません。しかし、誰かが次のバージョンでこの回答を探している場合は、以下に返信します。

ここでStyle Trigger見られるように を使用して、その場でアイコン プロパティを更新します。スタイルの一部として、を取得します。SourceDataTemplateImage

于 2013-02-25T21:33:40.320 に答える
0

Damian Antonowicz の回答に基づいて機能するが、彼が使用する制御方法の完全な反転を実装していないことがわかった 1 つの方法は次のとおりです。

ビューモデル名前空間の下のビューモデルインスタンスに解決される部分クラスを作成します。

public partial class ViewModelInstanceLocator
{
    public AppViewModel AppViewModel // Or whatever the type of your view-model is ...
    {
        get 
        { 
            return App.VM; // Or wherever your view model instance is ...
        }
    }
}

XAML ページでクラスの残りの半分をリソースとして定義して、静的リソースとして参照できるようにApp.xamlします。

<ResourceDictionary>
    <viewmodel:ViewModelInstanceLocator x:Key="ViewModelInstanceLocator" />
    ...
</ResourceDictionary>

ビューモデルの名前空間への参照がまだない場合は、関連する名前空間を含める必要がある場合があります。

    xmlns:viewmodel="clr-namespace:MyAppNamespace.ViewModel"

最後に、次のようにビューモデルにバインドします。

{Binding AppViewModel.SomeProperty, Source={StaticResource ViewModelInstanceLocator}}

ビューモデル インスタンスが DataContext を介して参照されたかのように、バインドは通常どおり更新されます。ただし、設計時データでは機能しません

于 2013-02-26T12:35:01.987 に答える