2009-11-12 50 views
0

我有一個WPF應用程序。如何在當前應用程序屬性更改時引發事件

以我App.xaml.cs我保存的全名登錄的用戶,如下所示:

App.Current.Properties [ 「全名」] = GetValueFromDatabase();

我在同一個應用程序中有兩個屏幕/窗口。

首先是用戶scrren,它有一個可編輯的WPF數據網格,我可以更新當前用戶的全名。 其次是一個具有Label/TextBox控件的屏幕,該控件顯示來自Application對象的當前用戶全名。

當兩個窗口都打開時,如果我更改用戶的全名並將更改保存在第一個屏幕中。我想觸發一個事件,因此,它也立即反映在第二個屏幕上?

哪個事件可以掛鉤到這個應用程序?

我正在使用MVVM模式和實體框架。

回答

0

我實現了一個調解員類,充當在兩個Windows的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

謝謝克里斯。但考慮到特定場景,如果我在第一個屏幕上提出該事件,是否會在第二個屏幕上立即更新?將不得不嘗試一下。 – 2009-11-12 15:30:17

+0

是的,它會立即更新。 wpf框架會發送一個「屬性已更改」事件,並且綁定到該屬性的任何內容都會在沒有任何干預的情況下自行更新。不需要額外的代碼。 – 2009-11-12 15:45:22

相關問題