2014-02-19 3 views
1

Я создаю веб-сайт из стандартного приложения для навигации Silverlight в VS2012. Я хотел бы иметь один и тот же файл данных для моей главной страницы и моего домашнего вида. Я создал класс Employee с одним свойством Name, которое я хотел бы показать в текстовом блоке в навигации в главном представлении и в содержимом домашнего вида. В домашнем виде у меня также будет текстовый блок, откуда я могу изменить содержимое имени.Share datacontext для двух видов

Независимо от того, как я пытаюсь установить datacontext, он всегда создает экземпляр сотрудника для каждого из двух видов. Как заставить их использовать один и тот же экземпляр?

Employee.cs

public class Employee : INotifyPropertyChanged 
{ 
    string _name = "Test"; 
    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      if (_name != value) 
      { 
       _name = value; 
       OnPropertyChanged("Name"); 
      } 
     } 
    }  

    public event PropertyChangedEventHandler PropertyChanged; 

    void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

MainPage.xaml

<TextBlock x:Name="ApplicationNameTextBlock" Style="{StaticResource ApplicationNameStyle}" 
      Text="{Binding Name}"/> 

Home.xaml

<TextBox Text="{Binding Name, Mode=TwoWay}"/>  
<TextBlock Text="{Binding Name}"/> 
+0

Вы ничего о том, как создать виртуальную машину и назначить Просмотры DataContext не сказать? – codeSetter

+0

Как вы установили datacontext? – Jimmy

+0

Я попытался установить datacontext в обоих .xaml-файлах, а также в файлах с кодом. Но насколько я понимаю, это установить datacontext в .xaml на элементе управления так же, как если бы я написал: this.Datacontext = new Employee() в файле с кодом. Моя проблема заключается в том, как получить представление MainPage и Home для совместного использования того же экземпляра Employee – Steean

ответ

0

Это может быть достигнуто с помощью вспомогательного класса, который часто называют ViewModelLocator.

public static class ViewModelLocator 
{ 
    private static Employee myEmployee = null; 
    public static Employee GetEmployee() 
    { 
     if (myEmployee == null) 
      myEmployee = new Employee(); 

     return myEmployee; 
    } 
} 

В коде позади ваших страниц:

DataContext = ViewModelLocator.GetEmployee(); 
+0

Это именно то, что я искал :) Большое вам спасибо – Steean

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