Wpf 如何在更改当前应用程序属性时引发事件

Wpf 如何在更改当前应用程序属性时引发事件,wpf,mvvm,object,Wpf,Mvvm,Object,我有一个WPF应用程序 在我的App.xaml.cs中,我将登录用户的全名保存如下: App.Current.Properties[“FullName”]=GetValueFromDatabase() 我在同一个应用程序中有两个屏幕/窗口 首先是UsersScrren,它有一个可编辑的WPF数据网格,我可以在其中更新当前用户的全名。 第二个是一个屏幕,它有一个Label/TextBox控件,显示应用程序对象中当前用户的全名 当两个窗口都打开时,如果我更改了用户的全名并将更改保存在第一个屏幕中。我

我有一个WPF应用程序

在我的App.xaml.cs中,我将登录用户的全名保存如下:

App.Current.Properties[“FullName”]=GetValueFromDatabase()

我在同一个应用程序中有两个屏幕/窗口

首先是UsersScrren,它有一个可编辑的WPF数据网格,我可以在其中更新当前用户的全名。 第二个是一个屏幕,它有一个Label/TextBox控件,显示应用程序对象中当前用户的全名

当两个窗口都打开时,如果我更改了用户的全名并将更改保存在第一个屏幕中。我想触发一个事件,这样,它也会立即反映在第二个屏幕上

我应该将哪个事件挂接到此应用程序,以及如何挂接

我正在使用MVVM模式和实体框架。

您应该使用或确保您的模型是,以便其他人可以在屏幕或窗口中使用{Binding}绑定到它

// 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}" />
//如果您的模型是从DependencyObject的子类派生的。。。。
类模型:DependencyObject
{
公共静态只读从属属性MyStringProperty=
DependencyProperty.Register(“MyString”,typeof(string),
typeof(IncidentGraphic),新的UIPropertyMetadata(string.Empty));
公共字符串MyString
{
获取{return(string)GetValue(MyStringProperty);}
set{SetValue(MyStringProperty,value);}
}
}
///建议使用INotifyPropertyChanged
类模型:INotifyPropertyChanged
{
私有void NotifyChange(字符串属性)
{
PropertyChangedEventHandler处理程序=this.PropertyChanged;
if(处理程序!=null)
{
处理程序(此,新属性ChangedEventArgs(属性));
}
}
string m_MyString=string.Empty;
公共字符串MyString
{
得到
{
返回m_MyString;
}
设置
{
if(值!=this.m_MyString)
{
this.m_MyString=值;
通知变更(“MyString”);
}
}
}
}
//在您的xaml中。。。。。

谢谢你,克里斯。但是考虑到给定的场景,如果我在第一个屏幕中引发事件,它会在第二个屏幕中立即更新吗?必须试用。是的,它会立即更新。wpf框架发送一个“property changed”事件,任何绑定到该属性的内容都将在您不进行任何干预的情况下自动更新。不需要额外的代码。