Условная загрузка элементов управления WPF - PullRequest
3 голосов
/ 12 января 2011

Дано:

        <StackPanel>      
<View:ArcController x:Name="control1" Visibility="{Binding Path=CanShowDateControl, Converter={StaticResource bool2VisibilityConverter}}"  />
<my1:DateLabelView x:Name="control2" DataContext="{Binding Path=DateLabelViewModel}" Visibility="{Binding ElementName=ctrlTableToolbar, Path=DataContext.IsDateReadOnly, Converter={StaticResource bool2VisibilityConverter}}"  />

        </StackPanel>         

У меня есть два элемента управления (control1 и control2) внутри стековой панели, и в одно время я хочу показать только один из элементов управления. Как показано в коде, видимость элементов управления определяется «IsDateReadOnly» и «CanShowDateControl». И, согласно моей логике модели представления ... CanShowDateControl =! IsReadOnly.

Итак, однажды я покажу ТОЛЬКО один из двух элементов управления.

Вопрос: Моя проблема в том, что, хотя я показываю только один элемент управления за раз, мой xaml создает экземпляр обоих элементов управления. Можно ли создать экземпляр только того элемента управления, который я показываю?

Дайте это:

1) Я хочу показать / скрыть, используя привязку, чтобы логика лежала в моей модели просмотра. 2) Я могу хранить эти два элемента управления в одном элементе управления оберткой. Так как я использую его в разных местах.

Спасибо за проявленный интерес.

1 Ответ

3 голосов
/ 12 января 2011

Используйте ContentControl и ContentTemplateSelector с двумя DataTemplate с. Один для ReadOnly и другой для Not ReadOnly.

В селекторе, основанном на свойстве, вернуть соответствующее DataTemplate.

Другой способ, которым вы могли бы пойти, - это создать Custom Control, который имеет два (или более, если их больше двух) свойства для хранения двух элементов управления. Исходя из условия, он должен добавить один из них в Visual Tree, что предотвратит загрузку другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...