我正在尝试显示视觉指示“isbusy”,而当窗口打开时网格1-3正在加载。我已经能够在使用“telerik:RadToggleButton isbusy”加载网格后显示加载指示,但我想在窗口打开时和加载网格之前显示它。有人可以提前向我指出正确的方向。
<Window.Resources/>
<UserControl Name="tbMain" HorizontalAlignment="Left">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
</Grid.RowDefinitions>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel Orientation="Vertical" HorizontalAlignment="Stretch">
<telerik:RadGridView (1)/>
<telerik:RadGridView (2)/>
<telerik:RadGridView (3)/>
</StackPanel>
</ScrollViewer
<DockPanel Grid.Row="1" Background="SkyBlue">
<Button x:Name="btnAcceptMerge" Content="Accept Merge" DockPanel.Dock="Left"/>
<Button x:Name="btnCancel" Content="Cancel Merge" Click="btnCancel_Click" DockPanel.Dock="Right"/>
<TextBlock Text=""/>
</DockPanel>
</Grid>
</UserControl>
</Window>
答案 0 :(得分:2)
您可以使用Xceed工具包的繁忙控制。使用它你必须使用backgroundworker。
下面是完整的解决方案。
XAML:
首先,您必须添加Xceed工具包的命名空间引用。
xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
之后你必须使用BusyIndicator环绕你的网格,你也可以实现进步。
<xctk:BusyIndicator.BusyContentTemplate>
<DataTemplate>
<StackPanel Margin="0" Background="#FFD1DEF0" >
<TextBlock Text="Generating......" />
<StackPanel Margin="4">
<ProgressBar Value="{Binding Path=DataContext.ProgressValue, RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}" Height="15"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</xctk:BusyIndicator.BusyContentTemplate>
<xctk:BusyIndicator.OverlayStyle>
<Style TargetType="Rectangle">
<Setter Property="Fill" Value="Transparent" />
</Style>
</xctk:BusyIndicator.OverlayStyle>
<xctk:BusyIndicator.ProgressBarStyle>
<Style TargetType="ProgressBar">
<Setter Property="IsIndeterminate" Value="False"/>
<Setter Property="Visibility" Value="Collapsed"/>
<Setter Property="Maximum" Value="100"/>
</Style>
</xctk:BusyIndicator.ProgressBarStyle>
<telerik:RadGridView (1)/>
<telerik:RadGridView (2)/>
<telerik:RadGridView (3)/>
</xctk:BusyIndicator>
ViewModel中的:
在VM构造函数中,您应该将IsVMBusy属性设置为true。
var worker = new BackgroundWorker();
worker.DoWork += (o, ea) =>
{
///your task
};
worker.RunWorkerCompleted += (o, ea) =>
{
IsVMBusy = false;
};
worker.RunWorkerAsync();
答案 1 :(得分:0)
您可以使用telerik的BusyIndicator控件来围绕网格,并将其绑定到VM上的IsBusy
属性。
<telerik:BusyIndicator IsBusy="{Binding IsBusy}">
<StackPanel>
<telerik:RadGridView (1)/>
<telerik:RadGridView (2)/>
<telerik:RadGridView (3)/>
</StackPanel>
</telerik:BusyIndicator/>
假设您使用VM第一种技术,其中VM在视图之前创建(即在视图的构造中注入它),您可以在VM的构造函数中将IsBusy
设置为True
并设置它当网格或完成加载时返回false。另外,请确保IsBusy
加注PropertyChanged
。