2016-11-23 2 views
1

Я создал привязку данных к DataGrid с Collection-Class в WPF. Я сделал следующие вещи для привязки.Datagrid with Databinding остается пустым, но коллекция имеет объекты

Коллекция-Класс:

internal class ZeichnungCollection : ObservableCollection<ZeichnungInDB> 
{ 
    public ZeichnungCollection() : base() 
    { 
    } 
} 

Объект-класс для коллекции:

class ZeichnungInDB : ISerializable 
{...//Properties and Constructors 
    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     this.GetObjectData(info, context); 
     info.AddValue("Zeichnungsnummer", Zeichnungsnummer, typeof(string)); 
     info.AddValue("Index", Index, typeof(string)); 
     info.AddValue("Volante-Index", Volante_Index, typeof(int)); 
     info.AddValue("Änderung Intern", Aenderung_Int, typeof(string)); 
     info.AddValue("Änderung Extern", Aenderung_Ext, typeof(string)); 
    } 
} 

Кодекс окна:

public Anzeigen() 
    { 
     InitializeComponent(); 
     zeichnungen = new ZeichnungCollection(); 
     dataInbox.ItemsSource = zeichnungen; 
     Keyboard.Focus(dataInbox); 
    } 
private void btnSearch_Click(object sender, RoutedEventArgs e) 
    { 
     int volIndex = -1; 
     if (checkAktuell.IsChecked == true && !txtZeichnungsnummer.Equals("")) 
     { 
      volIndex = DBZugriff.DBZugriff.getVolCountByDrawingNumber(txtZeichnungsnummer.Text); 
     } 
     int tagID = DBZugriff.DBZugriff.getTagIdByTag(txtTags.Text, int.Parse(txtProjektnummer.Text)); 
     int projektID = DBZugriff.DBZugriff.getProjectIdByProjectnumber(int.Parse(txtProjektnummer.Text)); 
     status = cmbStatus.Text; 
     mmsSachmerkmal = cmbMMSSachmerkmal.Text; 
     dokTyp = cmbDokTyp.Text; 
     extension = cmbDatEnd.Text; 
     zeichnungen.Clear(); 
     zeichnungen = DBZugriff.DBZugriff.findDrawings(projektID, txtZeichnungsnummer.Text, tagID, status, mmsSachmerkmal, dokTyp, extension, volIndex); 
     CollectionViewSource.GetDefaultView(dataInbox.ItemsSource).Refresh(); 
     Keyboard.Focus(dataInbox); 
    } 

Коллекция должна быть заполнена при нажатии на Searchbutton. Но он показывает мне одну пустую строку, когда я вызываю страницу. Итак, если коллекция пуста, в Datagrid не должно быть строк, не так ли? Я не заполняю коллекцию в другом месте в окне, и я проверил, действительно ли коллекция пуста. Поэтому я не понимаю, почему есть одна пустая строка.

Часть XAML-Binding Код:

<DataGrid x:Name="dataInbox" Grid.Row="1" Width="654" MaxHeight="500" AutoGenerateColumns="False" ItemsSource="{Binding Source=ZeichnungCollection}" HorizontalAlignment="Right" VerticalAlignment="Stretch" Margin="0,5"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="Zeichnungsnummer" Binding="{Binding Zeichnungsnummer, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/> 
        <DataGridTextColumn Header="Index" Binding="{Binding Index, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/> 
        <DataGridTextColumn Header="Volante-Index" Binding="{Binding Volante-Index, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/> 
        <DataGridTextColumn Header="Änderung Intern" Binding="{Binding Änderung Intern, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/> 
        <DataGridTextColumn Header="Änderung Extern" Binding="{Binding Änderung Extern, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/> 
       </DataGrid.Columns> 
      </DataGrid> 

Выбор: работы. Я проверил это, и коллекция заполнена нужными объектами, но DataGrid остается пустым, и я не знаю, почему. У кого-то есть идея, в чем проблема или что-то не так с привязкой?

У меня есть второй DataGrid в этом проекте на другой странице с другой коллекцией, но с той же структурой, что и этот, и там он отлично работает.

ответ

1

я думаю, что вы создаете новый экземпляр Zeichnungen в этой строке

zeichnungen = DBZugriff.DBZugriff.findDrawings(projektID, txtZeichnungsnummer.Text, tagID, status, mmsSachmerkmal, dokTyp, extension, volIndex); 

так что лучше использовать Еогеасп с оным, чтобы заполнить коллекцию.

foreach(var item in DBZugriff.DBZugriff.findDrawings(projektID, txtZeichnungsnummer.Text, tagID, status, mmsSachmerkmal, dokTyp, extension, volIndex)) 
{ 
    zeichnungen.Add(item); 
} 

или даже лучше переключиться на MVVM с INotifyPropertyChanged и креплениями

+0

Большое спасибо! Это была ошибка в моем коде. Теперь он работает нормально. – Only3lue

+0

Возможно, вы можете помочь мне с небольшой проблемой, которую я нашел и упомянул выше. Одна пустая строка есть, например, когда я загружаю страницу как последний элемент в DataGrid. Как я могу это решить? – Only3lue

+1

установить этот атрибут в свой xaml: CanUserAddRows = "false" – blindmeis