正在更新方法中的标签内容

本文关键字:标签 更新 新方法 | 更新日期: 2023-09-27 18:27:58

我需要更改流程中的WPF标签内容,我试过了,但没有实时更改内容。我哪里做错了?

事件调用方:

private void connect_button_MouseDown(object sender, MouseButtonEventArgs e)
{
    Mouse.OverrideCursor = Cursors.Wait;
    labelStstusUpdate("Connecting.."); // Status changer
    config = new Configuration();
    bool status = config.connectViaUSB();
    Mouse.OverrideCursor = null;
    if (!status)
    {
        labelStstusUpdate("Disconnected");// Status changer
    }
    else
    {
        labelStstusUpdate("Connected");// Status changer
    }
}

状态转换器方法:

private void labelStstusUpdate(string message)
{
    Dispatcher.BeginInvoke(DispatcherPriority.Background, (SendOrPostCallback)delegate
    {
        available_amount_label.Content = message;
    }, null);
}

正在更新方法中的标签内容

这是我最近的应用程序中的一段代码,我们在运行时更改标签的值,试图从这个中找到一个解决方法

 public partial class MainWindow : Window
 {
  int Value=0;
  private delegate void UpdateMyLabel(System.Windows.DependencyProperty dp, Object value);
  private void Processmerge()
  {
     UpdateMyLabel updateLabelDelegate = new UpdateMyLabel(_Mylabel.SetValue);
     foreach (var item in Collections)
     {
            string _Mylabel= "Process completed..." + Value.ToString() + " %";
            Dispatcher.Invoke(updateLabelDelegate, System.Windows.Threading.DispatcherPriority.Background, new object[] { System.Windows.Controls.Label.ContentProperty, _Mylabel});
       Value++;
     }
  }
}

}

在WPF中不能这样做-数据绑定完全不同。基本上,您必须将Window的Datacontext设置为您的类,然后将Label绑定到类上的一个属性。

这看起来像:

public class MyWindow()
{
    public string Labeltext{ get; set; }
    private void labelStstusUpdate(string message)
    {
        this.Labeltext = message
        this.NotifyOfPropertyChange(() => this.Labeltext);
    }
}

当您调用Notify方法时,WPF将注意到更改并更新标签。

作为提示:使用像Caliburn.Micro这样的mvvm框架进行WPF设计,它可以减少错误数量,并稍微简化开发。