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