我在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但是具有相同的结构,并且在那里工作正常。
答案 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