正在更新方法中的标签内容
本文关键字:标签 更新 新方法 | 更新日期: 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设计,它可以减少错误数量,并稍微简化开发。