如何在wpf中使用inotifypropertychanged事件从另一个窗口更新属性
我的应用程序中有两个用户控件,一个是Mainwindow,另一个是LoginWindow。Mainwindow.xaml中的标签与用户名绑定,用户名应该从LoginWindow更新 主窗口.Xaml如何在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
<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"
}