2014-02-19 1 views
1

VS2012의 표준 Silverlight 탐색 응용 프로그램에서 웹 사이트를 구축하고 있습니다. 내 Mainpage-view 및 Home-view에 동일한 datacontext를 사용하고 싶습니다. 나는 Mainpage-view의 내비게이션에있는 textblock과 home-view의 내용에 표시하고 싶은 Name이라는 속성 하나가있는 Employee 클래스를 만들었습니다. 집에서 볼 때 나는 또한 이름의 내용을 바꿀 수있는 텍스트 블록을 가질 것이다.두 개의보기에 대해 datacontext를 공유하십시오.

아무리 datacontext를 설정하려고해도 두보기 각각에 대해 항상 employee 인스턴스가 생성됩니다. 같은 인스턴스를 사용하려면 어떻게해야합니까?

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

당신은 VM을 생성 및 뷰의 DataContext에 할당하는 방법에 대해 아무것도 말하지 않았다? – codeSetter

+0

어떻게 datacontext를 설정 했습니까? – Jimmy

+0

두 .xaml 파일과 코드 숨김 파일 모두에서 datacontext를 설정해 보았습니다. 그러나 내가 이해하는 한은 컨트롤의 .xaml에 datacontext를 설정하는 것입니다. 코드 배후 파일에서 this.Datacontext = new Employee()를 썼습니다. 내 문제는 어떻게 직원의 동일한 인스턴스를 공유하는 MainPage 및 홈보기를 얻는 것입니다 – 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

관련 문제