1

WCF Ria サービスで Silverlight 5 を使用しています。迅速な開発のために、プロバイダー ベースのシステムをコーディングして ComboBoxes に入力しました。コンボのプロバイダーを設定し、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 ...>

<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>

そしてそれはこのように見えます、

仕事中のコンボ

一部のシナリオ (グリッド列など) では、UserControl ではなく、ComboBoxEdit 派生コントロールが必要でした。だから私はコードを変更し始めましたが、行き詰まっています。コントロールがビジーのときに表示される子コントロール (またはオーバーレイ コントロール) を追加する方法がわかりません。

<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. 両方のコントロールを意味するコンボボックスとビジーインジケーターをグリッドの同じ列のような同じ場所に配置し、非同期呼び出しの前に 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 に答える