带有数据绑定的Datagrid保持为空,但集合具有对象

时间:2016-11-23 07:42:26

标签: c# wpf xaml data-binding datagrid

我在WPF中使用Collection-Class对DataGrid进行了数据绑定。 我为Binding做了以下事情。

收集级:

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);
    }

点击“搜索”按钮时,应填写“收藏集”。但是当我调用Page时,它向我显示了一个空行。因此,如果Collection为空,那么Datagrid中应该没有行,对吧?我没有在窗口的其他地方填充Collection,我检查了Collection是否真的是空的。所以我不明白为什么有一个空行。

xaml-Binding Code:

<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>

选择有效。我检查了一下,Collection收集了正确的对象,但DataGrid保持空白,我不知道为什么。 有人知道问题是什么,或者我的绑定有什么问题吗?

我在这个项目的另一个页面上有第二个DataGrid与另一个Collection但是具有相同的结构,并且在那里工作正常。

1 个答案:

答案 0 :(得分:1)

我想你在这一行中创建了一个新的zeichnungen实例

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

所以你最好使用foreach和add来填充集合。

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

甚至更好地使用INotifyPropertyChanged和Bindings切换到MVVM