2016-11-23 4 views
1

私はWPFのCollection-Classを使ってDataGridにデータバインディングを行いました。 私はバインディングのために以下のことを行いました。Databindingの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); 
    } 

はコレクションが満たされるべきではクリック検索ボタンに表示されます。しかし、私はページを呼び出すと空の行が1つ表示されます。したがって、コレクションが空の場合は、データグリッドに行が存在しないはずです。私はウィンドウ内の別の場所でコレクションを塗りつぶしていないので、コレクションが本当に空であるかどうかを確認しました。だから私はなぜ空の行が1つあるのか分からない。

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は空のままであり、理由はわかりません。 誰かがアイデアを持っていますか?問題が何であるか、バインディングに何か問題がありましたか?

私は、他のコレクションでこのプロジェクトの2番目のDataGridを持っていますが、このような同じ構造であり、そこでは正常に動作します。

答えて

1

私はあなたがそうあなたがより良いコレクションを埋めるために、追加でのforeachを使用して、この行に

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

をzeichnungenの新しいインスタンスを作成すると思います。

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

またはINotifyPropertyChangedのとバインド

とMVVMへのより良いスイッチ
+0

はどうもありがとうございました!これは私のコードのエラーでした。今それは正常に動作しています。 – Only3lue

+0

あなたは私が上記で見つけて言及した少しの問題で私を助けることができるかもしれません。 1つの空の行は、DataGridの最後の要素としてPageを読み込んだときと同じです。これをどうすれば解決できますか? – Only3lue

+1

あなたのxamlにこの属性を設定してください:CanUserAddRows = "false" – blindmeis

関連する問題