1. UI有个ProgressControl.xaml,是用于弹出进度条窗口文件,主要内容如下:
<StackPanel><TextBlockText="{Binding Caption}"Style="{StaticResourceCaptionText}"/><BorderStyle="{StaticResourceContentBorder}"><StackPanel><StackPanelStyle="{StaticResourceContentMessageBorder}"><TextBlockText="{Binding Message}"Style="{StaticResourceContentMessage}"/><telerik:RadProgressBarMinimum="0"Maximum="100"Margin="10,10,10,0"Width="260"Height="25"Value="{Binding Value}"Visibility="Visible"/></StackPanel><StackPanelStyle="{StaticResourceButtonContainer}"><telerik:RadButtonCommand="{Binding CancelCommand}"Content="{Resx CancelBtnText}"IsCancel="True"/></StackPanel></StackPanel></Border></StackPanel>
它对应的VM属性主要是:
bool IsHidden { set; } string Caption { get; set; } bool IsVisible { get; set; } string Message { get; set; } int Value { get; set; } ICommand CancelCommand { get; }
2. 我另一个VM中实现导出图片并且弹出进度条的功能,主要代码如下:
_progressVM.IsVisible = true;//_progressVM是进度条窗口VM的实例 _progressVM.Caption = "导出"; if (modeIndex == "1") { var navImages = NavBarSelectedDocument.DocumentImagesUC_VM.Images.Where(x => x.IsDefaultImage == false).ToList(); if (!isExportSplitPage) { navImages = NavBarSelectedDocument.DocumentImagesUC_VM.Images.Where(x => x.IsDefaultImage == false && x.IsSplitPage == false).ToList(); } int i = 0; int count = navImages.Count; foreach (var item in navImages) { i++; _progressVM.Message = item.LinkedDocument.Name + "--" + item.Image.Name; _progressVM.Value = ((i * 100) / count); _project.ExportDocument(item.ImagePath, exportPath, item.LinkedDocument.Name, item.Name); } } _progressVM.IsVisible = false;
上面这段代码可以很好的弹出进度条窗口,可是我现在要实现取消功能,也就是弹出的窗口有个取消按钮,点击取消时,弹出窗口关闭,并且停止对图片的导出。我在progress的Cancel按钮绑定的命令里设置了IsVisible=false,但是不起作用,咋回事啊?我要怎么做才能实现这个功能,求大神帮忙,非常感谢
既然是使用MVVM,那么在VM里面是不会去访问界面控件,而是通过绑定或者消息来实现的。
对于MVVM你的理解可能还需要多一些,我这里有一篇文章可以参考 http://www.cnblogs.com/chenxizhang/archive/2011/10/01/2197786.html