Ошибка Datagrid. Список элементов должен быть пуст перед использованием с источником элементов.

У меня есть поле со списком, выбор которого определяет содержимое сетки данных.

<DataGrid  Height="100" Margin="10"/>

через

    private void ComboBox_DropDownClosed(object sender, EventArgs e)
    {
        string strComboBoxName = (sender as ComboBox).Name;
        string strComboBoxSelectedItem = (sender as ComboBox).Text;
        int iComboBoxSelectedItem = (sender as ComboBox).SelectedIndex;
        Serializers.Logger.WriteLog("ComboBox Dropdown closed " + strComboBoxName + " selected " + strComboBoxSelectedItem);
        string strError = string.Empty;
        string strNewText = (sender as ComboBox).Text;
        dtgFeatures.ItemsSource = null;

        switch (iComboBoxSelectedItem)
        {
            case 0: dtgFeatures.ItemsSource = obcCfgUsers; break;
            case 1: dtgFeatures.ItemsSource = obcCfgPartPrograms; break;
            default: MessageBox.Show("ComboBox_DropDownClosed: item " + iComboBoxSelectedItem + " not acknowledged"); break;
        }
    }
}

с

[Serializable]
public class CfgUsers
{  
    public string ID { get; set;}
    public string Username{ get; set;}
    public string Password{ get; set;}
    public bool IsAdministrator{ get; set;}
    //public Image Photo{ get; set;}
}

[Serializable]
public class CfgPartPrograms
{
    public string Group{ get; set;}
    public string Description{ get; set;}
    public string Filename{ get; set;}
    public string Notes{ get; set;}
    //public Image Picture{ get; set;}
}

короче говоря, он изменяет источник элементов для сетки данных.

Проблема в том, что я получаю следующую ошибку [перевод]:

Список элементов должен быть пустым перед использованием с источником элементов.

Это то, чего я не понимаю: я хочу иметь возможность изменить источник, но сохранить элементы в двух списках. И используйте сетку данных для добавления/редактирования элементов. Так что списки не могут быть пустыми.

Спасибо


person Luca    schedule 09.12.2016    source источник
comment
Можете ли вы показать полный XAML для DataGrid?   -  person Peter Hansen    schedule 09.12.2016
comment
Это весь код xaml для сетки данных. Вы хотите весь xaml? Больше ничего не связано с datagrid   -  person Luca    schedule 09.12.2016
comment
Это не может быть весь DataGrid XAML, где вы определяете имя? dtgFeatures   -  person The One    schedule 09.12.2016
comment
Кроме того, можем ли мы увидеть, как вы инициализируете CfgUsers и CfgPartPrograms. Там может быть что-то, что может испортить вам жизнь.   -  person Uchiha Itachi    schedule 09.12.2016
comment
@Tuco, а также   -  person Luca    schedule 09.12.2016
comment
@PeterHansen OMG Я чувствую себя таким глупым из-за того, что поменял имена: dtgFeatures на поле со списком, в котором отслеживалось событие. Что мне теперь делать, кроме как убить себя? Удалить вопрос, ответить себе, что еще? Может быть, крайняя глупость здесь и не сознается...   -  person Luca    schedule 09.12.2016


Ответы (2)


Убедитесь, что вы ничего не поместили непосредственно в элемент ‹DataGrid›...‹/DataGrid› в разметке XAML. Затем вы получите сообщение об ошибке, подобное этому, если попытаетесь установить его свойство ItemsSource программно.

Если вы определяете столбцы явно, не забудьте узел ‹DataGrid.Columns›:

<DataGrid>
  <DataGrid.Columns>
  ...
 </DataGrid.Columns>
</DataGrid>

Пожалуйста, опубликуйте всю разметку вашего DataGrid, если вам нужна дополнительная помощь.

person mm8    schedule 09.12.2016

Плохо, очень жаль, что я поменял имена для поля со списком и сетки данных. Вот почему поле со списком заблокировано в событии поля со списком.

person Luca    schedule 09.12.2016