C# 如何从主窗口更新非活动窗口的文本块文本

C# 如何从主窗口更新非活动窗口的文本块文本,c#,wpf,mvvm,C#,Wpf,Mvvm,我有两扇窗户;主窗口和子窗口。我需要更新子窗口上的文本块中的一些文本。但是文本不是更新,当我把文本块放在主窗口上时,它会更新文本 我尝试了以下代码: 主窗口QPlayer.XAML(活动窗口) ViewModel类QuranViewModel.CS namespace AlQuran.ViewModel { public class QuranViewModel : INotifyPropertyChanged { public ICommand Play_Bt

我有两扇窗户;主窗口和子窗口。我需要更新子窗口上的文本块中的一些文本。但是文本不是更新,当我把文本块放在主窗口上时,它会更新文本

我尝试了以下代码:

主窗口QPlayer.XAML(活动窗口)

ViewModel类QuranViewModel.CS

namespace AlQuran.ViewModel
{
    public class QuranViewModel : INotifyPropertyChanged
    {

        public ICommand Play_Btn { get; set; }

        public QuranViewModel()
        {
            Play_Btn = new RelayCommand(PlayMethod, CanExecuteMyMethod);
        }

        private string _txtAyah;

        public string TxtAyah
        {
            get { return _txtAyah; }
            set { _txtAyah = value; OnPropertyChanged("TxtAyah"); }
        }

        private void PlayMethod(object parameter)
        {
            TxtAyah =new Random().Next(5,999999).ToString() ;

            AyahWindow aw = new AyahWindow(TxtAyah);
            aw.txt = TxtAyah;

        }

    }
}
请帮帮我,我真的被困在这一点上了

这是我的项目形象,以便更好地理解

并且永远不要处理视图模型中的视图控件或类。从代码隐藏中的按钮事件处理程序中创建并显示
信息窗口
MainWindow.xaml:

<Window x:Class="MainWindow"
        DataContext="{StaticResource ProjViewModel}">
  <Grid>
      <Button Click="ShowWindow_OnClick"/>
      <TextBox Text="{Binding TextToShow, UpdateSourceTrigger=PropertyChanged}"/>
  </Grid>
</Window>
public partial class MainWndow
{
    private void ShowWindow_OnClick(object sender, RoutedEventArgs e)
    {
      new InfoWindow().Show();
    }
}
InfoWindow.xaml

<Window x:Class="InfoWindow" 
        DataContext="{StaticResource ProjViewModel}">
  <Grid>
        <TextBlock Text="{Binding TextToShow}"/>
    </Grid>
</Window>

这样做的唯一原因是子窗口需要使用Ui线程更新焦点,所以如果您可以将其设置为焦点,那么它将按预期工作。您可以使用
Dispatcher.Invoke
来调用同一个示例,您提供了完整的工作示例吗?你所说的InfoWindoiw interactive是什么意思?它可以在没有焦点切换的情况下工作。首先,默认情况下,
TextBox
Binding.Mode
TwoWay
。是否确实已将相同的
ProjViewModel
实例分配给
InfoWindow
Datacontext
?必须在App.xaml的资源中创建
ProjViewModel
的对象。然后将两个
窗口的
DataContext
控件绑定到它。视图模型在两个窗口之间共享很重要。我已编辑并更新了我的问题。请复习。
<Window x:Class="MainWindow"
        DataContext="{StaticResource ProjViewModel}">
  <Grid>
      <Button Click="ShowWindow_OnClick"/>
      <TextBox Text="{Binding TextToShow, UpdateSourceTrigger=PropertyChanged}"/>
  </Grid>
</Window>
public partial class MainWndow
{
    private void ShowWindow_OnClick(object sender, RoutedEventArgs e)
    {
      new InfoWindow().Show();
    }
}
<Window x:Class="InfoWindow" 
        DataContext="{StaticResource ProjViewModel}">
  <Grid>
        <TextBlock Text="{Binding TextToShow}"/>
    </Grid>
</Window>
class ProjViewModel : INotifyPropertyChanged
{
    public ProjViewModel()
    {
    }

    private string _texttoshow;
    public string TextToShow
    {
        get { return _txttoshow; }
        set { _txttoshow= value; OnPropertyChanged("TxtToShow"); }
    }
}