将WPF元素/控件从C#中的其他类或静态方法更改



我有一个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模式实现应用程序时,问题变得更简单。

  1. 定义具有字符串属性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"));
        }
      }
    } 
    
  2. 将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;
       }
     }
    
  3. 将数据绑定到视图模型:

     <TextBlock Margin="190,0,0,0" HorizontalAlignment="Right" Name="StatusTextBlock" Text="{Binding StatusText}" ></TextBlock>
    

最新更新