Я недавно начал изучать WPF + MVVM. Возможно, у меня неправильный конец палки или неправильная палка полностью в соответствии с тем, как все должно быть сделано.
Я пытаюсь создать простое приложение заказа, в котором есть элементы заказа, каждый заказ имеет элементы строки. На главной странице есть два раздела (для начала оба были usercontrols).
Верх привязан к списку заказов. Нижняя часть привязана к текущему выбранному ордеру (идея заключается в том, чтобы отобразить детали этого ордера).
Для просмотра сведений необходимо иметь возможность просматривать / редактировать и добавлять новые элементы. Для этого я подумал, что у меня должно быть два вида / шаблона: вид редактирования заказа и новый вид / шаблон заказа. Во время чтения я наткнулся на шаблоны данных и подумал, что это будет хорошим способом для достижения этой цели.
В моем mainwindow.xaml у меня вид списка заказов, связанный следующим образом:
<ContentControl Content="{Binding Path=OrdersViewModel}"
Представление подключается в файле ресурсов с помощью:
<DataTemplate DataType="{x:Type vm:AllOrdersViewModel}">
<vw:AllOrdersView />
</DataTemplate>
Это прекрасно работает, когда приложение запускается, отображаются их заказы. Я сделал то же самое с деталями заказа, чтобы начать с него (т. Е. Он имел только установленный тип данных, а не какой-либо определенный ключ). Это работало хорошо, если не был выбран ни один порядок, то представление не отображалось, а когда был выбран порядок, оно отображалось .
В настоящее время я пытаюсь изменить это на шаблон, чтобы я мог динамически переключать шаблон / представление таким образом, чтобы при нажатии пользователем НОВЫЙ заказ (у модели представления есть Enum, в котором указано текущее состояние заказа, поэтому я бы проверил против значения enum), представление должно измениться.
Если я попробую следующее, оно взорвется. Приложение запускается, отображается список заказов (на данный момент ни один заказ не выбран) и отображается подробное представление, а затем один из конвертеров взрывается из-за зависимостейproperty.unsetvalue (примечание, следует ли мне всегда проверять наличие тот?). В идеале я не хочу, чтобы представление отображалось до тех пор, пока не будет выбран заказ:
<ContentControl Content="{Binding Path=OrderViewModel}" ContentTemplate="{StaticResource ordertemplate}" />
<DataTemplate x:Key="ordertemplate">
<TextBlock Text="hello" />
</DataTemplate>
У меня есть два вопроса в основном:
1) как мне остановить отображение шаблона до тех пор, пока он не будет отображать данные?
2) как я могу динамически переключать представления / шаблоны на основе перечисления?