0

ボタンがクリックされると、コマンド バインディングを使用して ViewModel のメソッドを呼び出す GridView の項目テンプレートにボタンがあります。ViewModel は決してリリースされません。テンプレート:

<DataTemplate x:Key="ItemTemplate">

        <Button HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,0,0,0"
                                             Command="{Binding ElementName=LayoutRoot, Path=DataContext.NavigateToOtherPageCommand}"/>

</DataTemplate>

Command プロパティを削除した場合、または ViewModel でパブリック プロパティ (設定されていない) をコメント アウトした場合:

// public ICommand NavigateToOtherPageCommand { get; private set; }

漏れはありません。どんな助けでも大歓迎です!

編集:

私が思いついた解決策の 1 つは、放送システムを導入することです。私のViewModelはOnNavigatedToでこのシングルトンに登録します(そしてOnNavigatedFromで登録解除します)。Command バインディングは、アイテムのコンテキストに依存するようになりました。ICommand プロパティをアイテムに配置します。このプロパティは、起動時にブロードキャスト システムに渡されます。次に、ブロードキャスト システムがメッセージを ViewModel に渡します。少しハックな気がしますが、うまくいくと思います。

4

1 に答える 1

0

datatemplateから名前で要素にバインドすることはできません。アプリケーション全体のリソース(シングルトーン/ロケーターパターン)にバインドするか、{RelativeSource Mode=TemplatedParent}を使用してみてください。

于 2013-01-22T11:12:48.943 に答える