Für die Bindung [...] wurde kein DataContext gefunden

  • WPF MVVM
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Für die Bindung [...] wurde kein DataContext gefunden

    Guten Morgen allerseits,

    in folgendem XAML habe ich die Fehlermeldung Für die Bindung WFBreite bzw. WFHoehe wurde kein DataContext gefunden. in Zeile 21 und 23 und ich weiss nicht wie ich sie beheben soll. IntelliSense schlägt mir zwar DeckViewModel vor, aber der Clou ist, dass ich Instanzen des ViewModels DeckViewModel per Code erstelle (DeckLeft und DeckRight):

    XML-Quellcode

    1. xmlns:vm="clr-namespace:VamosALaPlayer_3._0.ViewModel.DataGridMovableRows;assembly=VamosALaPlayer_3._0.ViewModel"
    2. xmlns:u="clr-namespace:VamosALaPlayer_3._0.ViewModel.u;assembly=VamosALaPlayer_3._0.ViewModel"
    3. xmlns:mouse="clr-namespace:VamosALaPlayer_3._0.ViewModel.Maus;assembly=VamosALaPlayer_3._0.ViewModel"
    4. [...]
    5. <Canvas Grid.Row="0">
    6. <Canvas.InputBindings>
    7. <MouseBinding Command="{Binding MausRadUp}">
    8. <MouseBinding.Gesture>
    9. <mouse:MouseWheelUp />
    10. </MouseBinding.Gesture>
    11. </MouseBinding>
    12. <MouseBinding Command="{Binding MausRadDown}">
    13. <MouseBinding.Gesture>
    14. <mouse:MouseWheelDown />
    15. </MouseBinding.Gesture>
    16. </MouseBinding>
    17. </Canvas.InputBindings>
    18. <u:DataPiping.DataPipes>
    19. <u:DataPipeCollection>
    20. <u:DataPipe Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type Canvas}}, Path=ActualWidth}"
    21. Target="{Binding Path=WFBreite, Mode=OneWayToSource}"/>
    22. <u:DataPipe Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type Canvas}}, Path=ActualHeight}"
    23. Target="{Binding Path=WFHoehe, Mode=OneWayToSource}"/>
    24. </u:DataPipeCollection>
    25. </u:DataPiping.DataPipes>
    26. <Image Source="{Binding WFBild, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Stretch="Fill" Canvas.Top="0" Canvas.Left="{Binding XPosition, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
    27. <Line Stroke="{DynamicResource VordergrundfarbeBrush}" StrokeThickness="1" Y1="0" Y2="100" X1="{Binding X_1, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" X2="{Binding X_1, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
    28. </Canvas>


    WFBreite und WFHoehe geben mir dabei je eine 0 zurück und nicht wie gewünscht die Maße. Wenn ich das per IntelliSense vorgeschlagene DeckViewModel anklicke, addet er mir das hier:

    XML-Quellcode

    1. xmlns:viewmodel="clr-namespace:VamosALaPlayer_3._0.ViewModel;assembly=VamosALaPlayer_3._0.ViewModel" d:DataContext="{d:DesignInstance Type=viewmodel:DeckViewModel}"


    ...aber es funktioniert immer noch nicht....

    ... In einem Projekt mit nur einem "starren" ViewModel funktioniert der Code einwandfrei.

    Die Instanzen erstelle ich folgendermassen:

    VB.NET-Quellcode

    1. Public Property DeckLeft As ViewModel.DeckViewModel = New ViewModel.DeckViewModel(1)
    2. Public Property DeckRight As ViewModel.DeckViewModel = New ViewModel.DeckViewModel(2)


    Und im XAML werden sie so angezeigt:

    XML-Quellcode

    1. xmlns:local="clr-namespace:VamosALaPlayer_3._0.View"
    2. [...]
    3. <local:Plattendeck1_2View Grid.Column="0" Grid.Row="0" DataContext="{Binding DeckLeft}"/>
    4. <local:Plattendeck1_2View Grid.Column="2" Grid.Row="0" DataContext="{Binding DeckRight}"/>


    Die Klasse DataPiping sieht so aus:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Windows
    2. Namespace u
    3. Public Class DataPiping
    4. Public Shared ReadOnly DataPipesProperty As DependencyProperty = DependencyProperty.RegisterAttached("DataPipes", GetType(DataPipeCollection), GetType(DataPiping), New Windows.UIPropertyMetadata(Nothing))
    5. Public Shared Sub SetDataPipes(ByVal o As DependencyObject, ByVal value As DataPipeCollection)
    6. o.SetValue(DataPipesProperty, value)
    7. End Sub
    8. Public Shared Function GetDataPipes(ByVal o As DependencyObject) As DataPipeCollection
    9. Return CType(o.GetValue(DataPipesProperty), DataPipeCollection)
    10. End Function
    11. End Class
    12. Public Class DataPipeCollection
    13. Inherits FreezableCollection(Of DataPipe)
    14. End Class
    15. Public Class DataPipe
    16. Inherits Freezable
    17. Public Property Source As Object
    18. Get
    19. Return CObj(GetValue(SourceProperty))
    20. End Get
    21. Set(ByVal value As Object)
    22. SetValue(SourceProperty, value)
    23. End Set
    24. End Property
    25. Public Shared ReadOnly SourceProperty As DependencyProperty = DependencyProperty.Register("Source", GetType(Object), GetType(DataPipe), New FrameworkPropertyMetadata(Nothing, New PropertyChangedCallback(AddressOf OnSourceChanged)))
    26. Private Shared Sub OnSourceChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
    27. CType(d, DataPipe).OnSourceChanged(e)
    28. End Sub
    29. Protected Overridable Sub OnSourceChanged(ByVal e As DependencyPropertyChangedEventArgs)
    30. Target = e.NewValue
    31. End Sub
    32. Public Property Target As Object
    33. Get
    34. Return CObj(GetValue(TargetProperty))
    35. End Get
    36. Set(ByVal value As Object)
    37. SetValue(TargetProperty, value)
    38. End Set
    39. End Property
    40. Public Shared ReadOnly TargetProperty As DependencyProperty = DependencyProperty.Register("Target", GetType(Object), GetType(DataPipe), New FrameworkPropertyMetadata(Nothing))
    41. Protected Overrides Function CreateInstanceCore() As Freezable
    42. Return New DataPipe()
    43. End Function
    44. End Class
    45. End Namespace

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()