Переключение шаблонов данных во время выполнения - проблема обновления - PullRequest
4 голосов
/ 26 ноября 2008

Я использую архитектуру MVVM, чтобы отделить мое приложение. То есть вы часто видите что-то вроде

var u = new UserControl();
u.Content = new MyCustomType(); // MyCustomType is not a control

Пользовательский интерфейс определяется с помощью шаблонов данных, которые находятся в словарях ресурсов в своих собственных файлах XAML

<ResourceDictionary ...>
    <DataTemplate DataType="{x:Type local:MyCustomType}">
        ...

Я загружаю ресурсы при запуске приложения, и приложение с радостью отображает мой пользовательский интерфейс. Но если я удаляю шаблон данных и добавляю новый (тот же ключ, тот же тип данных), пользовательский интерфейс все еще использует старый шаблон данных. Конечно, я могу переустановить содержимое моего контейнера для принудительного обновления, но это кажется глупым, потому что я должен уведомлять каждый элемент управления об изменении, как это

var tmp = control.Content;
control.Content = null;
control.Content = tmp; // New data template will be used

Есть ли другие подходы?

1 Ответ

4 голосов
/ 26 ноября 2008

Это потому, что ресурсы в вашем словаре статичны. После их использования они не будут обновляться. Вы можете попытаться перезагрузить словари, но это будет обновлять только новые элементы управления, а не старые.

Если вы хотите поддерживать несколько DataTemplates, вы можете рассмотреть класс DataTemplateSelector, который выберет шаблон в соответствии с вашими условиями: http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

Если вам нужно переключать шаблоны «на лету», вы всегда можете использовать ControlTemplates и свойство Binding for Template вашего элемента управления ...

{Binding Converter={StaticResource YourAwesomeTemplateSwitcherConverter}}

НТН

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