如何使用 wpf 中的 inotify属性changed 事件从另一个 window 更新 属性

How to Update a property from another window using inotifypropertychanged event in wpf

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

MainWindow.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>

Mainwindow.xaml.cs 在登录时显示window

private void Button_Click(object sender, RoutedEventArgs e)
        {
            LoginWindow loginwin = new LoginWindow();
            var host = new Window();
            host.Content = loginwin;
            host.Show();
        }

成功登录后,UserName 应显示在 Mainwindow 上。

在 LoginWindow 中,我只是放置了一个按钮,用于触发将 UserName 更新为 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.cs INotifyPropertyChnaged 事件实现的地方

 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;

    }

如果我从 Mainwindow 提出用户名更改,将 Datacontext 提供给 LoginClass 的对象,程序将按预期工作。

当我从 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 
                }

如何使用 Inotify属性chnaged 事件从另一个 window 更新 UI。

我从过去 4 小时开始就在尝试此操作.. 请您帮忙。

非常感谢!

两个 windows 应该使用相同的 DataContext,即您应该只创建一个 LoginClass:

的实例

主窗口:

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"
}