0

Silverlight5とRIAサービスで、DomainDataSourcesを使用します。

DataGridがバインドされているフィルターComboBoxがあります。

問題:コンボボックスの上部に「すべて選択」を実装する方法-現在、データベースにID = 0の行を配置し、フィルターでIgnoredValue="0"を使用して実装しています。

    <riaControls:DomainDataSource.FilterDescriptors>
        <riaControls:FilterDescriptor PropertyPath="AccountTypeID" Operator="IsEqualTo" IgnoredValue="0" Value="{Binding Path=SelectedItem.AccountTypeID,
            ElementName=AccountTypeComboBox, FallbackValue=0}"  />
    </riaControls:DomainDataSource.FilterDescriptors>         
</riaControls:DomainDataSource>

<riaControls:DomainDataSource x:Name="AccountTypeDataSource" AutoLoad="True" QueryName="GetAccountTypes" PageSize="15" LoadSize="30">
    <riaControls:DomainDataSource.DomainContext>
        <domain:xxxDomainContext />
    </riaControls:DomainDataSource.DomainContext>
</riaControls:DomainDataSource>

ここに画像の説明を入力してください

データがComboBoxにロードされた後、コードにすべて表示を手動で追加したい

編集以下のMartinのおかげで、次のように機能するようになりました。

private xxxDomainContext xxxDomainContext;

    public MainPage()
    {
        InitializeComponent();

        // Load up the AccountType ComboBox - instead of doing it in XAML
        // then add in the Select All via proxy class above
        xxxDomainContext = new xxxDomainContext();
        EntityQuery<AccountType> query = xxxDomainContext.GetAccountTypesQuery();
        LoadOperation loadOperation = xxxDomainContext.Load<AccountType>(query);

        // everything is async so need a callback, otherwise will get an empty collection when trying to iterate over it here
        loadOperation.Completed += AccountTypeLoadOperationCompleted;

 private void AccountTypeLoadOperationCompleted(object sender, System.EventArgs e)
        {
            // create new proxy class
            var listOfSelectableObjects = new List<SelectableObject<int>>();

            var selectAll = new SelectableObject<int> { Display = "Select All", KeyValue = 0};
            listOfSelectableObjects.Add(selectAll);

            // load values into new list
            foreach (var accountType in xxxDomainContext.AccountTypes)
            {
                var so = new SelectableObject<int>();
                so.Display = accountType.Description;
                so.KeyValue = accountType.AccountTypeID;
                listOfSelectableObjects.Add(so);
            }

            AccountTypeComboBox.ItemsSource = listOfSelectableObjects;
            // Set index to 0 otherwise a blank item will appear at the top and be selected
            AccountTypeComboBox.SelectedIndex = 0;
        }
4

1 に答える 1

0

過去に、以下に示すように、ディスプレイ、キー、および isDefault を持つ SelectableValue のようなプロキシ クラスを作成することで、これを実現しました。

public class SelectableObject<K>
{
   public string Display { get; set; }
   public K KeyValue { get;set; }
   public bool IsDefaultSelection { get; set; }
}

これは、選択しているアイテムのリストをたとえばに変換し、オプションでリストに直接バインドするのではなく、List<SelectableObject<int>>そのリストに追加のアイテムを追加できることを意味します。Display="Select All"IsDefault=true

それが役立つことを願っています。

于 2012-10-26T08:37:45.780 に答える