C# 如果textblock位于另一个窗口中,如何在usercontrol之外更改textblock值

C# 如果textblock位于另一个窗口中,如何在usercontrol之外更改textblock值,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我的main目标是在用户更新用户名后更改侧栏文本 My侧边栏文本(显示用户名的文本)位于My主窗口中。xaml: 这是我的UserAccountView.xaml,我在这里更新用户详细信息 我知道用户的详细信息会被更新,因为可以检查用户详细信息的临时按钮(当然,当我再次登录时,用户详细信息会发生变化)。以下是我执行检查的方式: MessageBox.Show($”Id:{CurrentUserAccount.Id} \nUsername:{CurrentUserAccount.User

我的main目标是在用户更新
用户名后更改侧栏文本

My侧边栏文本(显示用户名的文本)位于My
主窗口中。xaml



这是我的
UserAccountView.xaml
,我在这里更新用户详细信息


我知道用户的详细信息会被更新,因为可以检查用户详细信息的临时按钮(当然,当我再次登录时,用户详细信息会发生变化)。以下是我执行检查的方式:

MessageBox.Show($”Id:{CurrentUserAccount.Id}
\nUsername:{CurrentUserAccount.Username}
\nPassword:{CurrentUserAccount.Password}
\创建的数据:{CurrentUserAccount.DateCreated});

这是我浏览菜单的方式(如果这与问题相关)

class MainWindowViewModel:BaseViewModel
{
公用ICommand仪表板视图命令{get;}
public ICommand profileview命令{get;}
//以及每个视图的其他命令
公共仪表板视图模型仪表板VM{get;set;}
public UserAccountViewModel ProfileVM{get;set;}
//和其他视图模型
公共对象CurrentView{get;set;}
公共用户帐户CurrentUserAccount{get;set;}
public MainWindowViewModel(用户帐户currentUserAccount)
{
CurrentUserAccount=CurrentUserAccount;
DashboardVM=新的DashboardViewModel();
ProfileVM=新的UserAccountViewModel(currentUserAccount.Username);
CurrentView=仪表板虚拟机;
DashboardViewCommand=new NavigationCommand(o=>{CurrentView=DashboardVM;});
ProfileViewCommand=new NavigationCommand(o=>{CurrentView=ProfileVM;});
}
}
我的
视图的
数据模板
(在App.xaml中):



如果从
ViewModel
(即
ContentControl
)进行“更改”,如何从
窗口更改元素的值

我不得不问这个问题,因为我没有发现与这个问题类似的东西,我也不知道我应该查找什么“关键字”,因为这是我第一次创建WPF应用程序


编辑: 我已经解决了这个问题,这要感谢@Clemens的评论(这让我对搜索内容有了一个想法),通过删除myUserAccountView
DataContext
,并在
UserControl
级别设置
DataContext
,我可以共享my主页和myUserAccountView的视图模型:



通常,窗口和UserControil应该共享一个公共视图模型。UserControl不能有自己的私有视图模型。等等。。。我所有的“视图”都有自己的视图模型,我所有的“视图”都是用户控件。那么这是否意味着我的所有逻辑都将在一个大视图模型中?或者在主视图模型的子视图模型中。控件的私有视图模型彼此不了解,因此无法交换数据。等待。我很抱歉。但我不明白你说的意思。我刚刚开始学习wpf和mvvm,但我仍然不知道其中的细节,我发现你的回答令人困惑。好吧,从一个视图模型类和一个实例开始,它被分配给顶级元素的DataContext,即窗口。不要显式设置UserControls的DataContext,只让它们绑定到主视图模型。这是你的沟通。