如何使用 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"
}
我的应用程序中有两个用户控件,一个是 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"
}