OnPropertyChanged之后窗口未更新

时间:2019-12-13 12:27:38

标签: c# wpf data-binding inotifypropertychanged

我正在编写一个用于从其余端点收集数据的应用程序。

我创建了一个窗口以显示数据请求的状态:

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和其他站点,试图找出为什么这行不通,但是我阅读的所有内容都表明这应该行得通。我完全不知道如何解决此问题。任何帮助将不胜感激。

0 个答案:

没有答案