Nat*_*per 4 .net c# data-binding wpf events
我有一个MainWindow,它包含一个文本块[statusTextblock],它绑定到一个字符串[StatusText].StatusTextblock需要显示来自另一个窗口的组合框结果.当它在另一个窗口中发生变化时,我将这些数据传递回mainwindow,并且当发生这种情况时我已经创建了一个静态方法来更改字符串.
但是,所有这些的静态性使我无法在任何时候将我的textbox元素更改为StatusText的新值.
我考虑过工作,以便在用户返回Mainwindow时进行更改,但我没有成功.我尝试了激活和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;
}
Run Code Online (Sandbox Code Playgroud)
当您尝试使用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"));
}
}
}
Run Code Online (Sandbox Code Playgroud)将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;
}
}
Run Code Online (Sandbox Code Playgroud)将数据绑定设置为视图模型:
<TextBlock Margin="190,0,0,0" HorizontalAlignment="Right" Name="StatusTextBlock" Text="{Binding StatusText}" ></TextBlock>
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2373 次 |
| 最近记录: |