私の画面では、タブごとにいくつかのテーブル/クエリを含むタブ コントロールを作成しました。一部のパフォーマンスの問題に対処するために、各テーブルで [クエリの自動実行] オプションが無効になっています。テーブルを手動でロードし、並べ替えとページングを機能させることができました。ただし、組み込みの検索は機能しなくなりました。
画面のコード スニペットは次のとおりです。
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);
}
}
}
問題は、組み込みの検索機能を機能させるための適切なソリューションを取得できないことです。ここで何か不足していますか?すべての可能な解決策は非常に高く評価されます。前もって感謝します!
よろしく、
アラン・トレンティーノ