gpt4 book ai didi

c# - 从另一个类或 c# 中的静态方法更改 wpf 元素/控件

转载 作者:太空狗 更新时间:2023-10-30 00:42:54 25 4
gpt4 key购买 nike

我有一个主窗口,其中包含一个文本 block [statusTextblock],它绑定(bind)到一个字符串 [StatusText]。 StatusTextblock 需要显示来自另一个窗口的组合框结果。当它在另一个窗口中发生变化时,我将此数据传递回主窗口,并且我已经创建了一个静态方法来在发生这种情况时更改字符串。

但是,所有这一切的静态性让我无法在任何时候将我的文本框元素更改为 StatusText 的新值。

我想过变通办法来改变用户返回主窗口的时间,但我没有成功。我尝试了 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;
}

最佳答案

当您尝试使用 MVVM 模式实现应用程序时,问题变得更容易解决。

  1. 定义一个具有字符串属性 StatusText 的 View 模型类:

    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 的 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;
    }
    }
  3. 设置 View 模型的数据绑定(bind):

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

关于c# - 从另一个类或 c# 中的静态方法更改 wpf 元素/控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13121155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com