如何在wpf中使用inotifypropertychanged事件从另一个窗口更新属性

如何在wpf中使用inotifypropertychanged事件从另一个窗口更新属性,wpf,xaml,datacontext,inotifypropertychanged,Wpf,Xaml,Datacontext,Inotifypropertychanged,我的应用程序中有两个用户控件,一个是Mainwindow,另一个是LoginWindow。Mainwindow.xaml中的标签与用户名绑定,用户名应该从LoginWindow更新 主窗口.Xaml <Grid> <StackPanel> <StackPanel Orientation="Horizontal"> <Label Content="UserName: " FontWeight="Bol

我的应用程序中有两个用户控件,一个是Mainwindow,另一个是LoginWindow。Mainwindow.xaml中的标签与用户名绑定,用户名应该从LoginWindow更新

主窗口.Xaml

<Grid>
        <StackPanel>
        <StackPanel Orientation="Horizontal">
            <Label Content="UserName: " FontWeight="Bold"/>
            <Label Content="{Binding UserName}"/>
        </StackPanel>

            <Button Width="200" Height="30" VerticalAlignment="Bottom" Content="Open Login Window" Click="Button_Click" />

        </StackPanel>
    </Grid>
成功登录后,用户名应显示在主窗口上

在LoginWindow中,我刚刚放置了一个按钮,该按钮触发将用户名更新到Mainwindow

LoginWindow.xaml.cs

private LoginClass UserObj { get; set; }

        private void Login_click(object sender, RoutedEventArgs e)
        {
            UserObj = new LoginClass { Username = "From LoginWindow" };
            // How can i update the control <label content > in another userrcontrol 
        }
如果我从主窗口向LoginClass的对象提供Datacontext,则程序将按预期工作

当我从MainWindow itslef更改属性时,MainWindow上的UI正在更新

    private LoginClass UserObj { get; set; }    
    private void Button_click(object sender, RoutedEventArgs e)
                {
                    UserObj = new LoginClass { Username = "From MainWindow" };
this.DataContext = UserObj;
                    // INotifyPropertyChanged implementation is working fine as i am giving datacontext to UserObj to get updated 
                }
如何使用Inotifypropertychnaged事件从另一个窗口更新UI

我已经试了4个小时了。。请你帮忙


非常感谢

两个窗口应使用相同的DataContext,即您应仅创建LoginClass的单个实例:

主窗口:

登录窗口:


你好我认为您的数据绑定效率不高:当您想要更新名称时,实际上您正在创建一个新的LoginClass实例,它将中断数据绑定链接。=>只为你的LoginClass创建一个实例,将它绑定到两个窗口,并只更新用户名。我得到空引用异常。viewModel显示为空。。如果您没有按照我告诉您的那样将DataContext设置为:loginWin.DataContext=UserObj;
 private string _username;

        public string Username
        {
            get { return _username; }
            set
            {
                _username = value;
                onPropertyChnaged("Username");
            }
        }

        private void onPropertyChnaged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

    }
    private LoginClass UserObj { get; set; }    
    private void Button_click(object sender, RoutedEventArgs e)
                {
                    UserObj = new LoginClass { Username = "From MainWindow" };
this.DataContext = UserObj;
                    // INotifyPropertyChanged implementation is working fine as i am giving datacontext to UserObj to get updated 
                }
public partial class MainWindow : Window, INotifyPropertyChanged
{
    LoginClass UserObj = new LoginClass { Username = "From MainWindow" };

    public MainWindow()
    {
        InitializeComponent();
        DataContext = UserObj;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        LoginWindow loginwin = new LoginWindow();
        loginWin.DataContext = UserObj;
        var host = new Window();
        host.Content = loginwin;
        host.Show();
    }
}
private void Login_click(object sender, RoutedEventArgs e)
{
    var viewModel = DataContext as LoginClass;
    viewModel.Username = "From LoginWindow"
}