0

我需要在一个进程中更改 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);
}
4

2 回答 2

1

你不能在 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 设计,它大大减少了错误的数量并稍微简化了开发。

于 2013-08-16T10:13:57.847 回答
1

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

 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++;
     }
  }
}


}
于 2013-08-16T10:37:18.913 回答