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