EDIT: Die Frage war nicht klar genug. Tatsächlich gibt es zwei von ihnen.WPF-Bindung instanziiert Objekt zu Datenkontext
Q1:
ich ein Usercontrol "Custom" haben, die mit einer Vorlage dynamisch erstellt wird:
<Window.Resources>
<DataTemplate DataType="{x:Type my:CustomViewModel}">
<my:CustomView/>
</DataTemplate>
</Window.Resources>
<ItemsControl ItemsSource="{Binding Path=CustomList}"/>
Wo Custom eine Eigenschaft vom Typ ObservableCollection ist < ‚CustomViewModel> Zugehörigkeit zu MainWindowViewModel, Das ist der Window DataContext.
In CustomViews Xaml-Code sind einige Eigenschaften an CustomViewModels Eigenschaften gebunden. Alles funktioniert einwandfrei. Aber wenn ich versuche, diesen Code in der Custom zu tun hinter:
public CustomView()
{
InitializeComponents();
if (this.DataContext == null) Console.WriteLine ("DataContext is null");
else Console.WriteLine(this.DataContext.GetType().ToString());
}
Es wird in Console geschrieben: ‚Datacontext ist null‘, auch wenn Bindungen betweeen Custom und CustomViewModel arbeiten. Weißt du, warum es funktioniert?
Q2:
nun vorstellen, dass eine andere Customusercontrol hat (IndexPicker) im Inneren. IndexPicker hat auch ein ViewModel (IndexPickerViewModel), das für den Datenzugriff zuständig ist. Ich muss eine Eigenschaft ("Index") dieses IndexPickerViewModel an die vorherige Eigenschaft des CustomViewModels "Id" binden. Ich will es in StaticResources instanziiert und binden Sie es an die CustomViewModel (was ich glaube, ist die Datacontext nach meiner vorherigen Frage):
<UserControl x:Class="MyView.CustomView"
...
<UserControl.Resources>
<DataTemplate DataType="{x:Type myPicker:IndexPickerViewModel}">
<myPicker:IndexPicker/>
</DataTemplate>
<myPicker:IndexPickerViewModel x:Key="pickerViewModel" Index="{Binding Path=Id}/>
</Window.Resources/>
<ContentControl Content={StaticResource pickerViewModel}/>
Was ich versucht habe: Ich habe versucht, machen „IndexPickerViewModel“ erben von „DependencyObject "und make" Index "eine DependencyProperty. Aber die folgende Fehlermeldung erscheint:
"System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Id; DataItem=null; target element is 'IndexPickerViewModel' (HashCode=59604175); target property is 'Index' (type 'Nullable`1')
Ich glaube, dies ist wegen dem, was fragte ich gerade oben. Aber ist es möglich so etwas zu tun? Wenn ja, was fehlt mir? Und: Ist das eine dumme Idee? Vielen Dank im Voraus für jede Hilfe.
Warum binden Sie den Content einfach nur mit StaticResource ein? –
@Kaiser Aiman - Sie haben Recht, es war ein Fehler. Das Problem ist jedoch die Bindung zwischen dem Ressourcenobjekt und dem DataContext. – heliar