2009-11-12 9 views
0

WPF 응용 프로그램이 있습니다. 내 App.xaml.cs를에서현재 응용 프로그램 속성이 변경 될 때 이벤트를 발생시키는 방법

나는의 전체 이름을 저장하려면 다음과 같이 로그인 한 사용자 :

App.Current.Properties [ "하면 FullName을"] = GetValueFromDatabase();

동일한 응용 프로그램에 두 개의 화면/창이 있습니다.

첫 번째 사용자는 scrren입니다.이 사용자는 현재 사용자의 전체 이름을 업데이트 할 수있는 편집 가능한 WPF 데이터 그리드가 있습니다. 두 번째는 응용 프로그램 개체의 현재 사용자 fullname을 표시하는 Label/TextBox 컨트롤이있는 화면입니다.

창이 열리면 사용자의 전체 이름을 변경하고 첫 번째 화면에 변경 사항을 저장하면됩니다. 이벤트를 트리거하여 두 번째 화면에도 즉시 반영되도록 하시겠습니까?

이 응용 프로그램에 어떤 이벤트가 연결 되나요?

MVVM 패턴 및 엔티티 프레임 워크를 사용하고 있습니다.

답변

0

은 내가 중재자 클래스를 구현 한 {바인딩}하는 두 윈도우의 ViewModel간에 통신하는 매체 역할을합니다.

나는이 기사를 참조했다 : http://sachabarber.net/?p=477

0

당신은 dependency property 사용하거나 모델을 다른 사람이 사용하여 화면이나 창 하나에 결합 할 수있는 그래서 INotifyPropertyChanged 있는지 확인해야

// if your model is derived from a sub-class of DependencyObject.... 
class Model : DependencyObject 
{ 
    public static readonly DependencyProperty MyStringProperty = 
      DependencyProperty.Register("MyString", typeof(string), 
      typeof(IncidentGraphic), new UIPropertyMetadata(string.Empty)); 

    public string MyString 
    { 
     get { return (string)GetValue(MyStringProperty); } 
     set { SetValue(MyStringProperty , value); } 
    } 
} 

/// recommended to use INotifyPropertyChanged 
class Model : INotifyPropertyChanged 
{ 
    private void NotifyChange(string property) 
    { 
     PropertyChangedEventHandler handler = this.PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(property)); 
     } 
    } 

    string m_MyString = string.Empty; 
    public string MyString 
    { 
     get 
     { 
      return m_MyString ; 
     } 
     set 
     { 
      if (value != this.m_MyString) 
      { 
       this. m_MyString = value; 
       NotifyChange("MyString"); 
      } 
      } 
    } 
} 

// in your xaml..... 
    <TextBox Text="{Binding MyString}" /> 
+0

크리스. 주어진 시나리오를 고려할 때, 첫 번째 화면에서 이벤트를 발생 시키면 두 번째 화면에서 이벤트가 즉시 업데이트됩니까? 그것을 밖으로 시도해야 할 것입니다. –

+0

예, 즉시 업데이트됩니다. wpf 프레임 워크는 "속성 변경"이벤트를 보내고 속성에 바인딩 된 것은 사용자 개입없이 자체를 업데이트합니다. 추가 코드가 필요하지 않습니다. –

관련 문제