我有一个MainWindow,它包含一个文本块[statusTextblock],它绑定到一个字符串[StatusText]。 StatusTextblock需要显示来自另一个窗口的组合框结果。当它在另一个窗口中发生变化时,我将这些数据传回主窗口,并且当发生这种情况时,我已经创建了一个静态方法来更改字符串。
然而,所有这些的静态性使我无法在任何时候将我的textbox元素更改为StatusText的新值。
我考虑过工作,以便在用户返回Mainwindow时进行更改,但我没有成功。我尝试了activate和uielement gotfocus事件处理程序(我觉得第二个仍然是一个可能的修复)。
如果重要的话,主窗口也总是开放。我也更喜欢在代码中做事而不是xaml,但感谢任何帮助。有什么想法吗?
MainWindow xaml,然后是程序入口方法,然后是静态事件来改变statusText
<TextBlock Margin="190,0,0,0" HorizontalAlignment="Right" Name="StatusTextBlock" Text= {Binding}" ></TextBlock>
public MainWindow() //Obviously more went here, but it's not relevent
{
StatusTextBlock.DataContext = statusText;
}
static public void changeStatusText(string status)
{
statusText = status;
}
答案 0 :(得分:7)
当您尝试使用MVVM模式实现应用程序时,问题变得更加容易解决。
定义一个视图模型类,它具有字符串属性StatusText:
public class MainViewModel : INotifyPropertyChanged
{
private string _statusText;
public event PropertyChangedEventHandler PropertyChanged;
public string StatusText
{
get
{
return _statusText;
}
set
{
if (value == _statusText)
return;
_statusText = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("StatusText"));
}
}
}
将MainWindow的DataContext设置为MainViewModel的实例:
public MainWindow //Obviously more went here, but it's not relevant
{
private static MainViewModel _mainViewModel = new MainViewModel();
public MainWindow()
{
this.DataContext = _mainViewModel;
}
static public void ChangeStatusText(string status)
{
_mainViewModel.StatusText = status;
}
}
将数据绑定设置为视图模型:
<TextBlock Margin="190,0,0,0" HorizontalAlignment="Right" Name="StatusTextBlock" Text="{Binding StatusText}" ></TextBlock>