2015-06-30 4 views
0

Правильно ли менять экземпляры модели во время выполнения? Мой контроль был связан с первым экземпляром, но во время выполнения программы я хотел бы связать их с другим экземпляром.Сменить экземпляр модели во время выполнения?

somewheere в классе ViewModel:

//ViewDefault - already initialized 
// View - will be ready later 

public string TextProperty 
{ 
get 
      { 
       if (View != null) 
       { 
        return View.Model.text; 
       } return ViewDefault.Model.text; 
      } 
      set 
      { 
       if(View != null) 
        { 
        //.. logic with View.Model.text 
        }else{ 
         // logic with ViewDefault.Model.text 
        } 
        RaiseOnPropertyChanged("TextProperty"); 
} 

Вопрос в том - что я должен сделать, чтобы уведомить мое мнение, что связывание содержание изменилось?

<Setter Property="Text" Value="{Binding MyViewModel.TextProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

* ViewDefault.Model и View.Model имеют один тип

+0

Почему вы хотите изменить экземпляр? –

ответ

0

В моей точки зрения, ViewModel связывает View с Model так, если бы я должен был изменить Model Я хотел бы создать новую ViewModel и прикрепите его к DataContext View.

мнение должно быть создано кем-то (завод предпочтительно) и один создающего вид следует создавать DataContext тоже и прикрепив ее делают

View view = new View(); 
view.DataContext = new ViewModel(); 
+0

Как связать DataContext View во время выполнения (из источника)? Он заранее был предварительно определен в xaml – curiousity

+0

Это почти всегда плохое решение. Пожалуйста, уточните мой обновленный ответ –

+0

Я бы [не согласен] (http://stackoverflow.com/q/13085670/1997232): viewmodel в первую очередь сервисы * view *. Single ViewModel может обрабатывать несколько моделей. Идея иметь несколько ViewModels за просмотр * сильно пахнет *, как и для меня. View использует привязку для привязки к свойству в ViewModel. Какое свойство возвращается (свойство ModelA или свойство ModelB) - это не имеет значения * для представления *. Кроме того, нет ничего плохого в привязке [DataSource в xaml] (http://stackoverflow.com/a/4590558/1997232). Эти две причины и очень * абстрактный * характер ответа заставляют меня затушить ответ. Должен ли я? – Sinatr

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