2016-12-08 2 views
1

Здравствуйте, я относительно новый с Prism, но вот мой вопрос:Prism 5.0 обертка Модель Атрибуты в ViewModel

настоящее время я использую Призма 5 с WPF. Я создал модель, viewmodel и view. Просмотр обновляется при изменении атрибута из модели. Моя проблема: когда я хочу обработать Атрибут из модели (например, другое имя атрибута), представление не обновляется. Вот мой кодекс. Я буду очень могущественным, если ты поможешь мне.

Когда RunTinting в модели Изменения, представление не обновляется.

Модель

public class MyModel :BindableBase 

{    
    private Boolean _RunTinting; 
    public Boolean RunTinting 
    { 
     get { return _RunTinting; } 
     set { SetProperty(ref _RunTinting, value); } 
    } 

ViewModel

public class MainWindowViewModel : BindableBase 
{ 

    private MyModel model; 
    public MyModel Model 
    { 
     get { return this.model; } 
     set { SetProperty(ref this.model, value); } 
    } 

    public MainWindowViewModel() 
    { 
     this.Model=new MyModel(); 

    } 


    public Boolean RunTinting2 
    { 
     get { return this.model.RunTinting; } 
     set { SetProperty(ref this._RunTinting, value); } 
    } 

} 

XAML

<Label x:Name="label1_Copy11" Content="{Binding RunTinting2}" HorizontalAlignment="Left" Margin="366,320,0,0" VerticalAlignment="Top" Height="25" Width="85" > 
+1

Свойство изменяет события пожара на экземпляр, свойство которого изменяется. Это не магически переходит к другим объектам, которые раскрывают свойства другого объекта. – Will

ответ

-2

это, как я решил эту проблему, спасибо вы Рейчел и Уилл.

ViewModel

public void InitModel() 
    { 
     Model.PropertyChanged += Model_PropertyChanged; 
    } 

    private void Model_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     if (e.PropertyName == "RunTinting") 
     { 
      OnPropertyChanged("RunTinting2"); 
     } 

    } 

@ MM8, я пытался ваше решение, но он не работал ... но в любом случае спасибо за время, затраченное.

Я не знаю, почему мой ответ отрицательных оценок. Он работает и уважает модель mvvm!

+0

Это нехорошо решение, поскольку вы смешиваете Model и ViewModel. ViewModel не следует уведомлять View через INotifyPropertyChanged. Классы ViewModel должны наследовать от BindableBase, модель должна быть POCOs. Вы будете сталкиваться с проблемами производительности и потоков при создании и загрузке данных объекта через некоторую форму ORM таких как EF или Dapper. – toadflakz

+0

Viewmodel наследует от BindableBase, также делает модель. Это возможно с помощью платформы Prism. Вы можете проверить пример проектов из Prism. – user7268733

+0

Как долго призм и практик MVVM - вы не должны делать это независимо от того, что показывают их примеры. – toadflakz

0

Если установить модель свойство динамически вид должен связываться с этим свойством вместо свойства вид модели :

<Label x:Name="label1_Copy11" Content="{Binding Model.RunTinting}" HorizontalAlignment="Left" Margin="366,320,0,0" VerticalAlignment="Top" Height="25" Width="85" > 

Поскольку модель представления не будет создавать никаких уведомлений об изменениях, если для свойства модели установлено новое значение.

Другой вариант - установить свойство модели через свойство оболочки модели представления, то есть вместо того, чтобы устанавливать свойство модели непосредственно, вы устанавливаете свойство модели представления. Убедитесь, что вы установите свойство модели в инкубаторе собственности обертки и что вы поднимаете событие PropertyChanged для модели недвижимости вида, что вид связывается:

public class MainWindowViewModel : BindableBase 
{ 
... 
    public Boolean RunTinting2 
    { 
    get { return this.model.RunTinting; } 
    set { this.model.RunTinting = value; OnPropertyChanged("RunTinting2"); } 
    } 
} 

<Label x:Name="label1_Copy11" Content="{Binding RunTinting2}" HorizontalAlignment="Left" Margin="366,320,0,0" VerticalAlignment="Top" Height="25" Width="85" > 
+0

, но это событие propertychanged уже в классе Bindable? – user7268733

+0

Он по-прежнему не обновляет ваше решение! – user7268733

+0

Не могли бы вы предоставить воспроизводимый образец того, как и где вы тогда устанавливаете свойство? Вам либо необходимо установить и привязать к свойству модели, либо установить или привязать к свойству модели представления. И поднимите событие PropertyChanged в настройщике свойства, которое вы установили. – mm8

Смежные вопросы