Номер экземпляра конвертера для привязки в UWP - PullRequest
0 голосов
/ 02 июля 2019

Сколько экземпляров создает внутренне привязка для конвертеров.

<Image x:Uid="DisplayedImageUrl" Style="{StaticResource ImageStyle}" 
      Source="{Binding DisplayedImageURL, Converter={StaticResource ImageLogoConverter}}" />

Сколько экземпляров ImageLogoConverter будет там?

Хорошая идея использовать конвертер в ViewModel, если неттогда каков наилучший способ получить доступ к преобразованному значению свойства ViewModel.

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Это хорошая идея использовать конвертер в ViewModel?

Нет.Зачем вам использовать конвертер в модели представления, где вы можете вернуть преобразованное значение напрямую?Преобразователи используются в представлении, как правило, для преобразования значения, не связанного с представлением, которое возвращает модель представления.

Если нет, то как лучше всего получить доступ к преобразованному значению свойства ViewModel?

Вы можете просто вернуть уже преобразованное значение из модели представления, т. Е. Вместо привязки к свойству Uri, вы можете привязать непосредственно к свойству ImageSource.

Эторекомендуемый подход, если вы, например, намереваетесь отобразить много элементов в ItemsControl.Тогда вы, вероятно, не хотите вызывать конвертер для каждого видимого элемента по соображениям производительности.

0 голосов
/ 02 июля 2019

Полагаю, вы создали конвертер как ресурс:

Количество экземпляров теперь зависит от области, в которой объявлен ресурс конвертера.Если вы создадите его в <Page.Resources>, будет создан один экземпляр для использования страницей.Если вы создадите его в App.xaml в <Application.Resources>, это будет экземпляр для всего приложения.Конечно, вы даже можете использовать более узкую область действия - например, создать ее как ресурс отдельного элемента управления в вашем дереве XAML - в любом случае, при создании экземпляра родительского объекта создается один экземпляр.

Ситуация становится немного интереснее, если вы вставите ее в ItemTemplate элемента управления списком.Благодаря виртуализации система фактически не будет создавать один экземпляр для каждого элемента.Вместо этого он будет создавать только столько экземпляров, сколько уместится на экране, и они будут повторно использоваться при прокрутке пользователя.

Некоторые разработчики MVVM не любят преобразователи значений, но другие широко их используют.Это действительно вопрос предпочтений.Если вы ожидаете, что базовые данные будут часто меняться, желательно, чтобы код в преобразователе был как можно более быстрым, так как он выполняется в потоке пользовательского интерфейса.

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