Hallo,
ich habe ein Problem mit dem Binding in einem UserControl. Hier ist das UC:
Spoiler anzeigen
Preview3D zeigt mehrere 3D Modelle (Items-Property) an, darin lässt sich rotieren, zoomen etc. Funktioniert auch wunderbar.
Das XAML des Windows sieht so aus:
Dadurch, dass ich den DataContext manuell im ItemsChanged zuweise kann ich schonmal korrekt daran binden. Nur sobald ich per ElementName oder Ähnlichem binde klappt's nicht mehr. Wenn ich mir beim Debugging die Parent-Property des Items angucke ist diese null. Muss/kann ich der WPF irgendwie mitteilen, dass alle Items zum ElementTree gehören? Eigentlich wird der DataContext ja auch automatisch weitergereicht.
Hat jemand da vielleicht ne Idee?
Grüße
ich habe ein Problem mit dem Binding in einem UserControl. Hier ist das UC:
C#-Quellcode
- public partial class Preview3D : UserControl
- {
- public Preview3D()
- {
- InitializeComponent();
- SetValue(ItemsProperty, new FreezableCollection<FrameworkElement>());
- Items.Changed += Items_Changed;
- }
- public FreezableCollection<FrameworkElement> Items
- {
- get { return (FreezableCollection<FrameworkElement>)GetValue(ItemsProperty); }
- set { SetValue(ItemsProperty, value); }
- }
- public static readonly DependencyProperty ItemsProperty =
- DependencyProperty.Register("Items", typeof(FreezableCollection<FrameworkElement>), typeof(Preview3D), new PropertyMetadata(null));
- private void Items_Changed(object sender, EventArgs e)
- {
- if(Items == null)
- {
- ClearModels();
- return;
- }
- foreach(var itm in Items)
- {
- itm.DataContext = DataContext;
- IModelBase itmB = (IModelBase)itm;
- if (!modelGroup.Children.Any((i) => i == itmB.Model))
- AddModel(itmB);
- }
- for(int i = modelGroup.Children.Count - 1; i >= 0; --i)
- {
- var itm = modelGroup.Children[i];
- if (!Items.Any((it) => ((IModelBase)it).Model == itm))
- RemoveModel(itm);
- }
- }
- ...
- }
Preview3D zeigt mehrere 3D Modelle (Items-Property) an, darin lässt sich rotieren, zoomen etc. Funktioniert auch wunderbar.
Das XAML des Windows sieht so aus:
Dadurch, dass ich den DataContext manuell im ItemsChanged zuweise kann ich schonmal korrekt daran binden. Nur sobald ich per ElementName oder Ähnlichem binde klappt's nicht mehr. Wenn ich mir beim Debugging die Parent-Property des Items angucke ist diese null. Muss/kann ich der WPF irgendwie mitteilen, dass alle Items zum ElementTree gehören? Eigentlich wird der DataContext ja auch automatisch weitergereicht.
Hat jemand da vielleicht ne Idee?
Grüße