我有一个类有一个相当长的运行过程,我希望 GUI 能够取得进展。
该类有一个名为 Progress 的属性,它是一个实现 INotifyPropertyChanged 的类。我正在使用 BusyWorker 并将类的 Progress 属性绑定到它的数据上下文,但是每当进度更改时 BusyWorker 不会显示任何内容。我不知道我在这里是否有意义,所以这里有一些代码:
有问题的班级:
public class MyClass
{
public Progress MyProgress { get; set; }
public void Run()
{
MyProgress = new Progress();
MyProgress.Status = "Initialising";
// Do stuff, update progress, etc.
}
}
public class Progress : INotifyPropertyChanged
{
private string status;
public string Status
{
get { return status; }
set
{
status = value;
OnPropertyChanged("Status");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string info)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
XAML:
// ...
<xctk:BusyIndicator HorizontalAlignment="Stretch" Margin="0,0,0,0" Name="busyIndicator" VerticalAlignment="Stretch" BusyContent="{Binding}">
<xctk:BusyIndicator.BusyContentTemplate>
<DataTemplate>
<StackPanel Margin="4">
<TextBlock Text="{Binding Status}" FontWeight="Bold" HorizontalAlignment="Left"/>
</StackPanel>
</DataTemplate>
</xctk:BusyIndicator.BusyContentTemplate>
</xctk:BusyIndicator>
// ...
XAML.CS:
MyClass test = new MyClass();
BusyIndicator.DataContext = test.MyProgress;
BusyIndicator.IsBusy = true;
test.Run();
如果我这样运行它并在OnPropertyChanged
通话中停止,PropertChanged
则始终为空。如果我在我的 xaml.cs 中创建一个单独的 Progress 对象,它工作得很好,但我希望我的“运行”方法来处理这个。这甚至可能吗?