我将 Silverlight 5 与 WCF Ria 服务一起使用。为了快速开发,我编写了一个基于提供程序的系统来填充组合框。当我为组合设置提供程序并将 EditValue 绑定到 ViewModel 时,一切正常。
<Controls:BLComboBoxEdit2 x:Name="cbeDepartmentId"
EditValue="{Binding Path=Selected.DepartmentId, Mode=TwoWay"
ComboDataProvider="{Binding Path=DepartmentComboDataProvider}" />
但是为了在组合等待提供者加载数据时通知用户,我需要一个 BusyIndicator。我不知道如何在继承的控件中显示 BusyIndicator(我们可以通过覆盖 OnPaint 事件等在 WinForm 时代做到这一点)所以我创建了一个 UserControl,xaml 是这样的(我们使用的是 DevExpress ComboBoxEdit),
<UserControl ...>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Assets/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<dxe:ComboBoxEdit x:Name="combo" />
<toolkit:BusyIndicator x:Name="busyIndicator" Style="{StaticResource AjaxBusyIndicator}"
IsBusy="{Binding Path=ComboDataProvider.IsWorking}">
</toolkit:BusyIndicator>
</Grid>
它看起来像这样,
在某些情况下(对于网格列等),我们需要一个 ComboBoxEdit 派生控件,而不是 UserControl。所以我开始修改代码,但我卡住了。我不知道如何添加要在控件忙碌时显示的子控件(或覆盖控件?)。
<dxe:ComboBoxEdit ...>
<dxe:ComboBoxEdit.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Assets/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
<Common:PublicStrings x:Key="ResourceStrings" />
</ResourceDictionary>
</dxe:ComboBoxEdit.Resources>
<Grid>
<toolkit:BusyIndicator x:Name="busyIndicator" Style="{StaticResource AjaxBusyIndicator}"
IsBusy="{Binding Path=ComboDataProvider.IsWorking}" />
</Grid>
当我运行上面的代码时,组合正常工作,但没有显示忙碌指示符(正如这段代码所预期的那样,忙碌指示符成为组合的内容,如果我弹出组合[正在加载时]我可以看到 BusyIndicator :) 但是首次加载后,由于内容已更改,它会消失)。
有没有办法做到这一点?现在我正在尝试在代码后面设置内容(在 IsBusy 更改后,我想将内容设置为 BusyIndicator 或保留为默认值),但没有运气。
任何帮助将不胜感激。