更新方法中的标签内容

时间:2013-08-16 10:08:55

标签: c# wpf

我需要在流程中更改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);
}

2 个答案:

答案 0 :(得分: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);
    }
}

当您调用通知方法时,WPF会注意到更改并更新标签。

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

答案 1 :(得分:1)

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

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


}
相关问题