Hallo,
ich habe ein eigens UserControl "MusterMerken.xaml" geschrieben, was eine AttachedProperty "ItemSource" hat:
|
public static readonly DependencyProperty ItemSourceProperty =
DependencyProperty.RegisterAttached("ItemSource", typeof(ObservableCollection<int>),
typeof(MerkfeldUC), new FrameworkPropertyMetadata(new ObservableCollection<int>(), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
OnItemSourceChanged));
|
An dieses ItemSource kann man ObservableColletions<int> binden.
Wenn ich das Control in einer anderen Xaml-Seite verwende, funktioniert das Binding in beide Richtungen einwandfrei. Also die Daten werden korrekt gesetzt und Änderungen im Control gelangen auch in das andere VM zurück.
Also so funktioniert es. Die ObservableCollection OwnField wird immer mit geändert, wenn in meinem UserControl etwas geändert wird.
|
<OwnControls:MerkfeldUC Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" ItemSource="{Binding OneField, Mode=TwoWay}" Margin="5"/>
|
|
public ObservableCollection<int> OneField
{
get { return oneField; }
set
{
oneField = value;
NotifyPropertyChanged("OneField");
}
}
|
Jetzt möchte ich mehrere eigene Controls in einer Listbox anzeigen:
Dazu habe ich mehrere ObservableCollections wiederum ein eine ObservableCollection gepackt, an die Listbox gebunden und mit einem Template versehen:
|
public ObservableCollection<ObservableCollection<int>> FelderSichtbar
{
get { return felderSichtbar; }
set
{
felderSichtbar = value;
NotifyPropertyChanged("FelderSichtbar");
}
}
private ObservableCollection<ObservableCollection<int>> felderSichtbar;
|
<ListBox Grid.Row="1" x:Name="listboxAufgaben" ItemsSource="{Binding FelderSichtbar, Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Disabled" MaxWidth="650" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<OwnControls:MerkfeldUC HorizontalAlignment="Center" VerticalAlignment="Center" ItemSource="{Binding ., Mode=TwoWay}" Margin="5"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
|
|
Das Binding in eine Richtung funktioniert einwandfrei. In meinen UserControls werden alle Daten richtig angezeigt, wenn ich sie dann allerdings im Usercontrol ändere bekommt die Liste "felderSichtbar" nichts davon mit.
Weiß jemand Rat?