1

我将 Silverlight 5 与 WCF Ria 服务一起使用。为了快速开发,我编写了一个基于提供程序的系统来填充组合框。当我为组合设置提供程序并将 EditValue 绑定到 ViewModel 时,一切正常。

<Controls:BLComboBoxEdit2 x:Name="cbeDepartmentId" 
  EditValue="{Binding Path=Selected.DepartmentId, Mode=TwoWay" 
  ComboDataProvider="{Binding Path=DepartmentComboDataProvider}" />

但是为了在组合等待提供者加载数据时通知用户,我需要一个 BusyIndi​​cator。我不知道如何在继承的控件中显示 BusyIndi​​cator(我们可以通过覆盖 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>

当我运行上面的代码时,组合正常工作,但没有显示忙碌指示符(正如这段代码所预期的那样,忙碌指示符成为组合的内容,如果我弹出组合[正在加载时]我可以看到 BusyIndi​​cator :) 但是首次加载后,由于内容已更改,它会消失)。

有没有办法做到这一点?现在我正在尝试在代码后面设置内容(在 IsBusy 更改后,我想将内容设置为 BusyIndi​​cator 或保留为默认值),但没有运气。

任何帮助将不胜感激。

4

1 回答 1

1
  1. 尝试将两个控件都表示组合框和busyindicator放在同一个位置,就像放在网格的同一列上,并在异步调用之前使IsBusy = true(两者具有相同的高度和重量)并在完成事件时将其更改为false

  2. 将组合框作为内容放入 BusyIndi​​cator 中

     <toolkit:BusyIndicator x:Name="busyIndicator" Style="{StaticResource AjaxBusyIndicator}" IsBusy="{Binding Path=ComboDataProvider.IsWorking}">
       <ComboBox/>
    </toolkit:BusyIndicator>
    
于 2012-07-12T06:01:30.397 回答