Связывание данных wpf и SelectionMode Single - PullRequest
0 голосов
/ 22 июня 2011

У меня было две таблицы данных в wpf: grid1 для всех доступных планов и grid2 для выбранных планов.Две сетки разделены двумя кнопками (>) и (<).Кнопка (>) - добавить выбранный план в сетку 2 связанных планов и удалить его из сетки 1.Кнопка (<) предназначена для удаления выбранного элемента из grid2 и добавления его в grid1 (для удаления из выбранных планов). </p>

<DataGrid  Name="grdAllPlans" SelectionMode="Single" ItemsSource="{Binding}">
<Button Click="linkClicked">
<Button Click="UnlinkClicked">
<DataGrid  Name="grdSelectedPlans" SelectionMode="Single" ItemsSource="{Binding}">

У меня было две глобальные переменные с планами:

static List<PlanDTO> PlansAssociated = new List<PlanDTO>();  //contain plans selected
static List<PlanDTO> PlansAvailable = new List<PlanDTO>();   //contain all plans not selected

Это вызов метода для привязки плана (удалить из grid1 и добавить его в grid2):

private void linkClicked(object sender, RoutedEventArgs e)
    {

            if (grdAllPlans.SelectedItem != null)
            {
                PlanDTO selectedPlan = (PlanDTO)grdAllPlans.SelectedItem;
                PlansAvailable.Remove(selectedPlan); //remove from collection PlansAvailable
                PlansAssociated.Add(selectedPlan); //add it to selected collection

                //Update grid1 
                srcCollectionViewAvailable.Source = PlansAvailable;
                grdPlansDisponibles.ItemsSource = srcCollectionViewAvailable.View;

        //Update grid2
        srcCollectionViewAssociated.Source = PlansAssociated;
        grdPlansAsociés.ItemsSource = srcCollectionViewAssociated.View;

                grdPlansAsociés.UnselectAll();
                grdPlansDisponibles.UnselectAll();
            }

    }

Проблема, с которой он не работает.В первый раз, когда я добавляю план в сетку выбранного плана, он делает это хорошо, но после этого обе сетки не обновляются.Также SelectionMode = "Single" не работают.Я был в состоянии выбрать несколько строк.

1 Ответ

1 голос
/ 22 июня 2011

Вам нужно использовать ObservableCollection вместо List для этих 2 глобальных переменных.

Проблема в том, что пользовательский интерфейс не уведомлялся при изменении списка. Использование ObservableCollection уведомит пользовательский интерфейс автоматически.

...