Я разрабатываю ViewModel на основе BindableBase. Эта виртуальная машина содержит экземпляр модели домена. VM предоставляет свойство, например Name, из которого я хочу не использовать локальное хранилище (т. Е. Хранилище в VM), а скорее делегировать свойство объекта модели. Я хотел бы использовать SetProperty(), но ссылка на хранилище не может быть свойством. Должен ли я реализовать INotifyPropertyChanged? Разве это вообще хорошая идея делегировать модель таким образом? Можно ли расширить BindableBase (или команду, чтобы добавить), чтобы покрыть это?Prism BindableBase.SetProperty()
ответ
Итак, сначала вы должны выбрать, как вы будете архитектовать свои виртуальные машины и модели. Как вы упомянули, есть несколько вариантов. Самый простой и способ, которым я рекомендую, чтобы просто выставить вашу модель как свойство, а затем привязать свой вид к свойствам модели:
public class MyViewModel : BindableBase
{
private Person _myPerson;
public Person Person
{
get { return _myPerson; }
set { SetProperty(ref _myPerson, value); }
}
}
Если вы не хотите, чтобы сделать это, и предпочел бы обернуть каждую отдельную модель вы сделаете это так.
public class MyViewModel : BindableBase
{
private Person _myPerson;
private string _name;
public string Name
{
get { return _myPerson.Name; }
set { _myPerson.Name = value }
}
}
Имейте в виду, что ваш объект модели Person все еще должен внедрять INPC.
EDIT: Если у вас нет контроля над вашими моделями и им необходимо внедрить INPC, вы можете попробовать использовать ткачество IL или создать фасад/декоратор для своих моделей и обернуть их индивидуально.
public class MyPersonFacade : BindableBase
{
private Person _myPerson;
private string _name;
public string Name
{
get { return _myPerson.Name; }
set
{
_myPerson.Name = value;
OnPropertyChanged();
}
}
}
Затем используйте это как свою модель на своей виртуальной машине.
Предположим, что модель Legacy и INPC не опция – EuroEager
, тогда вы создаете фасад вокруг своей модели и реализуете INPC. Таким образом, у вас будет PersonFacade, который обертывает каждое свойство и вызывает INPC.При использовании SetProperty вы не можете использовать SetProperty. –
Хорошо, спасибо. Похоже, что «невозможно» перегрузить метод SetProperty, чтобы затем взять другое свойство вместо локального хранилища. Я могу жить с моей «собственной» реализацией INPC (RaisePropertyChanged с использованием атрибута CallerMemberName и т. Д.) – EuroEager
- 1. BindableBase.SetProperty не обновляет интерфейс
- 2. Отображение модулей Prism внутри модуля Prism
- 3. Альтернативы PRISM
- 4. Prism RequestNavigate
- 5. Prism ModuleDependency
- 6. Prism IConfirmNavigationRequest
- 7. Prism Навигация
- 8. Prism - Мне действительно нужно использовать менеджера региона Prism?
- 9. Обновление от Prism wp8.1 до Prism 6 UWP
- 10. WPF + MvvM + Prism
- 11. Использование Prism с Ninject
- 12. Microsoft Prism-based solutions
- 13. Интеграция MEF и Prism
- 14. Prism Unity background view
- 15. PRISM модуль регистрация
- 16. ADO.NET DataServices с Prism
- 17. tinymce and prism issue
- 18. Prism - Команды не розжиг
- 19. Silverlight PRISM, создавая поведение
- 20. Prism and Entity Framework
- 21. PRISM + Tabs = Pain
- 22. PRISM/Unity IDisposable
- 23. TabControl с областями PRISM
- 24. Пример для Delphi Prism
- 25. ViewModelLocator in prism mvvm
- 26. Prism зависимые модули
- 27. Не удается установить Prism ...?
- 28. WPF Панель с Prism
- 29. Prism - Условная навигация
- 30. Невозможно создать Prism оболочку
Можете ли вы разместить код, чтобы мы могли понять, что вы просите. Я не уверен, что понимаю этот вопрос. –
Я новичок, чтобы начать потоки StackOverflow, кажется, что поле комментариев довольно ограничено по размеру, поэтому я опубликую несколько комментариев по этому поводу: – EuroEager
Я думаю, что существует как минимум 3 подхода к привязке к свойствам: 1: Bind непосредственно к свойству модели, которое предоставляет Модели представление. Я бы хотел этого избежать. 2: привязать свойство ViewModel, которое, в свою очередь, получит доступ к свойству модели. 3: Пуристый путь; Привяжите свойство ViewModel, которое полностью изолировано от Модели. Подход 2 - это (я думаю) практический подход, предполагающий взаимно однозначное отношение к свойству Модели. Подход 3 (я предполагаю) необходим, если нет взаимно однозначного отношения (например, вычисленного свойства какого-либо вида). – EuroEager