WCF Ria サービスで Silverlight 5 を使用しています。迅速な開発のために、プロバイダー ベースのシステムをコーディングして ComboBoxes に入力しました。コンボのプロバイダーを設定し、EditValue を ViewModel にバインドすると、すべてが完全に機能します。
<Controls:BLComboBoxEdit2 x:Name="cbeDepartmentId"
EditValue="{Binding Path=Selected.DepartmentId, Mode=TwoWay"
ComboDataProvider="{Binding Path=DepartmentComboDataProvider}" />
しかし、コンボがプロバイダーによってデータがロードされるのを待っている間にユーザーに通知するには、BusyIndicator が必要でした。継承されたコントロールで BusyIndicator を表示する方法がわかりませんでした (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>
上記のコードを実行すると、コンボは正常に動作しますが、ビジー インジケーターは表示されません (このコードから予想されるように、ビジー インジケーターはコンボのコンテンツになります。[進行中の読み込み中に] コンボをポップアップすると、BusyIndicator が表示されます:)最初のロード後、コンテンツが変更されたため表示されなくなります)。
これを行う方法はありますか?今、コード ビハインドでコンテンツを設定しようとしています (IsBusy が変更された後、コンテンツを BusyIndicator に設定するか、デフォルトのままにしたい) が、うまくいきません。
どんな助けでも大歓迎です。