2016-11-23 29 views
1

我已经使用WPF中的Collection-Class对DataGrid进行了数据绑定。 我为绑定做了以下事情。Datagrid与数据绑定保留为空,但集合具有对象

收藏级:

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上。但是当我打电话给我时,它向我显示了一个空行。所以如果Collection是空的,Datagrid中不应该有行,对吧?我不会在窗口的其他位置填充该集合,并且检查该集合是否真的是空的。所以我不明白为什么有一个空行。

的XAML绑定代码:

<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 = DBZugriff.DBZugriff.findDrawings(projektID, txtZeichnungsnummer.Text, tagID, status, mmsSachmerkmal, dokTyp, extension, volIndex); 

让你更好的使用的foreach有加,以填补集合创建zeichnungen的新实例。

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

相关问题