Обычно элементы моего представления создаются стандартным методом привязки ControlControl.Content
к свойству, которое содержит виртуальную машину или ноль. Это хорошо, потому что WPF будет создавать элемент представления (через неявный DataTemplate
) только в том случае, если виртуальная машина действительно существует.
У меня есть еще один фрагмент пользовательского интерфейса, видимость которого переключается с помощью флага VM. Обычно я бы использовал boolToVisibilityConverter для этого. Тем не менее, этот кусок пользовательского интерфейса достаточно дорогой для создания и редко появляется.
Вместо этого я хочу пойти на расходы на конструкцию вида, только если флаг включен. Я придумал следующее:
<ContentControl>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding SomeVMFlag}" Value="True">
<Setter Property="Content">
<Setter.Value>
<vw:ExpensiveView/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
Это кажется довольно неуклюжим, и я не могу не чувствовать, что есть лучший способ? Есть предложения?