| 

.NET C# Java Javascript Exception

4
Hallo

Ich habe hier eine kleine WPF Anwendung die in einem Window zwei DataGrid anzeigt.
An beiden Grids hängt die genau gleiche Collection. Ich will nun das der User einen neuen Datensatz hinzufügen kann. Das geht ja einfach mit CanUserAddRows="True". Aber, die Setting vom unterne Grid überschreibt mir das Obere.

Wichitg ist nur das CanUserAddRows Property.

Das hier wird falsch gerändert.
<DataGrid HorizontalAlignment="Left"
Margin="0,1,0,0"
VerticalAlignment="Top"
RenderTransformOrigin="-10,-3.154"
Height="284"
Width="779"
x:Name="dg"
CanUserAddRows="True" />


<DataGrid HorizontalAlignment="Left"
Margin="0,310,0,0"
VerticalAlignment="Top"
Height="284"
Width="779"
x:Name="dgLagNAG"
CanUserAddRows="False" />


Das hier richtig.
<DataGrid HorizontalAlignment="Left"
Margin="0,1,0,0"
VerticalAlignment="Top"
RenderTransformOrigin="-10,-3.154"
Height="284"
Width="779"
x:Name="dg"
CanUserAddRows="False" />


<DataGrid HorizontalAlignment="Left"
Margin="0,310,0,0"
VerticalAlignment="Top"
Height="284"
Width="779"
x:Name="dgLagNAG"
CanUserAddRows="True" />

Die Collection wird so gesetzt.
public MainWindow()
{
InitializeComponent();

m_Authors = LoadCollectionData();
dg.ItemsSource = m_Authors;
dgLagNAG.ItemsSource = m_Authors;
}


Wenn ich aber die Collection wie folgt setzte, dann funktionieren die Properties im xaml immer einwandfrei.
public MainWindow()
{
InitializeComponent();

m_Authors = LoadCollectionData();
m_Authors2 = LoadCollectionData();
dg.ItemsSource = m_Authors;
dgLagNAG.ItemsSource = m_Authors2;
}


Was um hat nun die Collection mit den Properties zu tun? Ich will doch im oberen DataGrid die selben Daten binden können wie im Unteren ohne das es mir die Settings verhaut?
News:
16.05.2014
GENiALi 2,5k 1 2 8
Ich habe es eben nachgebaut.
Scheint wohl nen Bug zu sein.
judgy 18.05.2014
1 Antwort
2
Wenn Du die ItemsSource auf ein Objekt festlegst, erzeugt WPF im Hintergrund eine Default CollectionView für die Instanz. Ich vermute, dass diese View wiederverwendet wird, wenn Du dasselbe Objekt an beide Grids bindest.
Als Alternative zum zweimaligen Laden und Verwenden von zwei Instanzen, kannst Du mal versuchen, zwei CollectionViewSource Instanzen zu erzeugen, und in beiden das Datenobjekt als Source zu setzen. Dein Beispiel lässt vermuten, dass Du im Code-Behind der View arbeitest, damit wäre mein Vorschlag durchaus einen Versuch wert.
Da CollectionView und CollectionViewSource aber streng genommen View-Klassen sind, würde ich - falls Du MVVM einsetzt - eine XAML Lösung bevorzugen. Die CollectionViewSource Klasse sollte das eigentlich erlauben, indem Du in XAML zwei CVS definierst und als Source jeweils dasselbe Binding setzt.
17.05.2014
ffordermaier 8,4k 3 9
Genau das wird es sein. Bin in zwischen auch über etliche Beispiele gestolpert. :-)
GENiALi 19.05.2014

Stelle deine .net-Frage jetzt!