2

私の画面では、タブごとにいくつかのテーブル/クエリを含むタブ コントロールを作成しました。一部のパフォーマンスの問題に対処するために、各テーブルで [クエリの自動実行] オプションが無効になっています。テーブルを手動でロードし、並べ替えとページングを機能させることができました。ただし、組み込みの検索は機能しなくなりました。

画面のコード スニペットは次のとおりです。

partial void MyScreen_Activated()
{
   this.FindControl("children").ControlAvailable += new EventHandler(TabControlAvailableHandler);
}

void TabControlAvailableHandler(object sender, ControlAvailableEventArgs e)
{
    TabControl control = e.Control as TabControl;
    control.SelectionChanged += TabControlChangeHandler;
}

private void TabControlChangeHandler(object sender, SelectionChangedEventArgs e)
{
    var tab = (TabControl)sender;
    var tabitem = tab.SelectedItem as TabItem;

    if (tabitem == null) 
    {
        return;
    }

    var cip = tabitem.Content as Microsoft.LightSwitch.Presentation.Framework.ContentItemPresenter;

    if (cip == null) 
    {
        return;
    }

    LightSwitchApplication.UserCode.Helpers.LightswitchUiHelper.LoadContentItemValues(cip.ContentItem);
 }

私の友人が特別なヘルパーを作成し、ソート/ページングの問題を解決するトリックを行いました。

ヘルパーのコード スニペットは次のとおりです。

///
/// Recursively loads the bindings of the content item and its ChildItems.
///
/// The dispatcher.
/// The content item.
internal static void LoadContentItemValues(IDispatcher screenDispatcher, IContentItem contentItem)
{
    foreach (IContentItem tmp in contentItem.ChildItems) 
    {
        LoadContentItemValues(tmp);
    }

    if (contentItem.Value != null) 
    {
        LoadMethod(contentItem);

        var objectWithDetails = contentItem.Value as Microsoft.LightSwitch.IObjectWithDetails;
        var detailsWithModel = objectWithDetails == null ? null : objectWithDetails.Details as Microsoft.LightSwitch.Details.IDetailsWithModel;
        var contentProperty = detailsWithModel as INotifyPropertyChanged;

        if (contentProperty != null) 
        {
            Dispatchers.Main.Invoke(() => {
                contentProperty.PropertyChanged += (s, e) => {
                    switch (e.PropertyName) 
                    {
                        case "PageNumber":
                        case "SortDescriptors":
                            screenDispatcher.BeginInvoke(() => {
                                LoadMethod(contentItem);
                            });
                            break;
                    }
                };
            });
        }
    }
}

///
/// Execute the Load() method of the value.
///
/// The content item.
static void LoadMethod(IContentItem contentItem)
{
    if (contentItem.Value != null) 
    {
        var loadmethod = contentItem.Value.GetType().GetMethod("Load");

        if (loadmethod != null) 
        {
            loadmethod.Invoke(contentItem.Value, null);
        }
    }
}

問題は、組み込みの検索機能を機能させるための適切なソリューションを取得できないことです。ここで何か不足していますか?すべての可能な解決策は非常に高く評価されます。前もって感謝します!

よろしく、
アラン・トレンティーノ

4

0 に答える 0