我试图在我的WPF应用程序中实现进度条。
所以我在我的观点中添加了一个
<ProgressBar Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Height="31"
Minimum="0"
Maximum="50"
Value="{Binding CurrentProgress}" />
我的ViewModel获得了一个新属性:
public int CurrentProgress
{
get { return mCurrentProgress; }
set
{
if (mCurrentProgress != value)
{
mCurrentProgress = value;
RaisePropertyChanged("CurrentProgress");
}
}
}
当我的load命令执行时,它会为每个加载的文件引发Generated事件。 此事件的EventHandler为“当前进程”增加了+1。这样的财产:
private void GeneratedHandler(object sender, EventArgs eventArgs)
{
CurrentProgress++;
}
但是我没有看到酒吧有任何进展。有人看到我做错了什么吗? 提前谢谢!
答案 0 :(得分:1)
我已经尝试过复制你的问题了,但它在这里工作得很好。
无论如何,您可以遵循以下几个步骤:
确保您没有在UI线程上加载文件。如果是,请查看&#34;在执行冗长任务时显示进度&#34; 在this文章上。
确保DataContext
的{{1}}正确无误,Window
实施ViewModel
并且您的System.ComponentModel.INotifyPropertyChanged
方法正确无误。
以下是我使用过的代码(不要复制并粘贴app.xml ):
<强>视图模型:强>
RaisePropertyChanged
<强> MainWindow.xml 强>
public class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged([CallerMemberName] string property = "")
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
private int _Progress;
public int Progress
{
get
{
return _Progress;
}
set
{
if(value != Progress)
{
_Progress = value;
NotifyPropertyChanged();
}
}
}
}
app.xaml :
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{StaticResource ResourceKey=ViewModel_MainWindow}">
<Grid>
<ProgressBar Value="{Binding Progress}" Minimum="0" Maximum="50" />
</Grid>