我正在编写一个用于从其余端点收集数据的应用程序。
我创建了一个窗口以显示数据请求的状态:
XAML
<Window x:Class="Gallery.Splash"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowStartupLocation="CenterScreen"
WindowStyle="None"
AllowsTransparency="True"
Height="75"
Width="500">
<Grid>
<StackPanel Orientation="Horizontal">
<Image Source="Assets/rooks.png" Width="75" Margin="50,0,0,0"/>
<Label x:Name="status_bar" Margin="50,0,0,0" Content="{Binding Progress, Mode=TwoWay}" VerticalAlignment="Center" FontSize="24"/>
</StackPanel>
</Grid>
</Window>
隐藏代码
using System.Windows;
namespace Gallery
{
/// <summary>
/// Interaction logic for Splash.xaml
/// </summary>
public partial class Splash : Window
{
public TaskStatus p;
public Splash()
{
InitializeComponent();
p = new TaskStatus();
DataContext = p;
}
internal void update(string v)
{
p.Progress = v;
}
}
}
型号
using System.ComponentModel;
namespace Gallery
{
public class TaskStatus : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string name)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
private string _progress;
public string Progress
{
get
{
return _progress;
}
set
{
_progress = value;
OnPropertyChanged("Progress");
}
}
}
}
我正在等待任务运行时从另一个窗口调用此
var s = new Splash();
s.Show();
var a = get_atts();
s.update("Getting Attributes...");
a.Wait();
s.Close();
public async Task get_atts()
{
List<ProductAttribute> atts = new List<ProductAttribute>();
atts = await wc.Attribute.GetAll().ConfigureAwait(false);
foreach (ProductAttribute term in atts)
{
allatts.Add(await wc.Attribute.Terms.GetAll(term.id).ConfigureAwait(false));
}
}
该属性正在更新,并且正在触发PropertyChanged事件,但是窗口中的标签未更新。
我花了两天时间浏览Stack Overflow和其他站点,试图找出为什么这行不通,但是我阅读的所有内容都表明这应该行得通。我完全不知道如何解决此问题。任何帮助将不胜感激。