我有一个MainWindow,其中包含一个文本块[Statustextblock],该文本块[statustextblock]与字符串[Statustext]绑定。STATUSTEXTBLOCK需要从另一个窗口显示ComboBox结果。当它在另一个窗口中更改时,我将这些数据传递回MainWindow,并且在发生这种情况时,我做了一种静态方法来更改字符串。
但是,所有这些的静态性都使我无法在任何时候更改我的文本框元素,从
我考虑了周围的工作,以带来用户返回MainWindow时的更改,但我没有成功。我尝试了激活和UIELEMENT GOTFOCUS事件处理程序(我觉得第二个仍然是一个可能的解决方案)。
MainWindow也恰好始终打开。我也更喜欢在代码中进行代码,而不是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;
}
当您尝试使用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的数据台面设置为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>