私は最近、WPF + MVVM を学び始めました。スティックの端が間違っているか、物事のやり方が完全に間違っている可能性があります。
シンプルな注文アプリを作成しようとしています。注文アイテムがあり、各注文には明細があります。メイン ページには 2 つのセクションがあります (最初はどちらもユーザー コントロールでした)。
トップはオーダーのリストにバインドされています。下部は、現在選択されている注文にバインドされています (その注文の詳細が表示されるという考えです)。
詳細ビューでは、新しいアイテムを表示/編集および追加できる必要があります。この目的のために、編集注文ビューと新しい注文ビュー/テンプレートの 2 つのビュー/テンプレートが必要だと考えました。読んでいるうちにデータテンプレートに出くわし、これがこれを達成するための良い方法だと思いました.
私の mainwindow.xaml には、次のようにバインドされた注文ビューのリストがあります。
<ContentControl Content="{Binding Path=OrdersViewModel}"
ビューはリソース ファイルに次のように接続されています。
<DataTemplate DataType="{x:Type vm:AllOrdersViewModel}">
<vw:AllOrdersView />
</DataTemplate>
アプリが起動すると、注文が表示されます。最初に注文の詳細で同じことを行いました(つまり、定義されたキーではなく、データタイプのみが設定されていました。これはうまく機能しました。注文が選択されていない場合、ビューは表示されず、注文が選択されている場合は表示されます.
現在、これをテンプレートに変更して、テンプレート/ビューを動的に切り替えて、ユーザーが新しい注文をクリックしたときにできるようにしようとしています (ビューモデルには注文の現在の状態を示す列挙型があるため、列挙型に対してチェックします)値)、ビューが変更されます。
次のことを試してみると、爆発します。アプリが起動し、注文のリストが表示され (この時点では注文は選択されていません)、詳細ビューが表示されます。その後、依存関係プロパティ.unsetvalue が原因でコンバーターの 1 つが爆発します (補足: 常にチェックする必要があります)。それ?)。理想的には、注文が選択されるまでビューを表示したくない:
<ContentControl Content="{Binding Path=OrderViewModel}" ContentTemplate="{StaticResource ordertemplate}" />
<DataTemplate x:Key="ordertemplate">
<TextBlock Text="hello" />
</DataTemplate>
主に2つの質問があります。
1) 表示するデータが表示されるまでテンプレートが表示されないようにするにはどうすればよいですか?
2) 列挙型に基づいてビュー/テンプレートを動的に切り替えるにはどうすればよいですか?