我使用Silverlight 5与WCF Ria服务。为了快速开发,我编写了一个基于提供程序的系统来填充ComboBoxes。当我为组合体设置提供程序并将EditValue绑定到ViewModel时,一切都很完美。
<Controls:BLComboBoxEdit2 x:Name="cbeDepartmentId"
EditValue="{Binding Path=Selected.DepartmentId, Mode=TwoWay"
ComboDataProvider="{Binding Path=DepartmentComboDataProvider}" />但是为了在combo等待提供者加载数据时通知用户,我需要一个BusyIndicator。我不知道如何在继承的控件中显示BusyIndicator (我们可以在WinForm时代通过重写OnPaint事件等方式实现这一点)。所以我创建了一个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或保留为默认值),但没有成功。
任何帮助都将不胜感激。
发布于 2012-07-12 06:01:30
https://stackoverflow.com/questions/11427976
复制相似问题