Guten Morgen allerseits,
in folgendem XAML habe ich die Fehlermeldung
...aber es funktioniert immer noch nicht....
... In einem Projekt mit nur einem "starren" ViewModel funktioniert der Code einwandfrei.
Die Instanzen erstelle ich folgendermassen:
Und im XAML werden sie so angezeigt:
Die Klasse DataPiping sieht so aus:
Spoiler anzeigen
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
- xmlns:vm="clr-namespace:VamosALaPlayer_3._0.ViewModel.DataGridMovableRows;assembly=VamosALaPlayer_3._0.ViewModel"
- xmlns:u="clr-namespace:VamosALaPlayer_3._0.ViewModel.u;assembly=VamosALaPlayer_3._0.ViewModel"
- xmlns:mouse="clr-namespace:VamosALaPlayer_3._0.ViewModel.Maus;assembly=VamosALaPlayer_3._0.ViewModel"
- [...]
- <Canvas Grid.Row="0">
- <Canvas.InputBindings>
- <MouseBinding Command="{Binding MausRadUp}">
- <MouseBinding.Gesture>
- <mouse:MouseWheelUp />
- </MouseBinding.Gesture>
- </MouseBinding>
- <MouseBinding Command="{Binding MausRadDown}">
- <MouseBinding.Gesture>
- <mouse:MouseWheelDown />
- </MouseBinding.Gesture>
- </MouseBinding>
- </Canvas.InputBindings>
- <u:DataPiping.DataPipes>
- <u:DataPipeCollection>
- <u:DataPipe Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type Canvas}}, Path=ActualWidth}"
- Target="{Binding Path=WFBreite, Mode=OneWayToSource}"/>
- <u:DataPipe Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type Canvas}}, Path=ActualHeight}"
- Target="{Binding Path=WFHoehe, Mode=OneWayToSource}"/>
- </u:DataPipeCollection>
- </u:DataPiping.DataPipes>
- <Image Source="{Binding WFBild, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Stretch="Fill" Canvas.Top="0" Canvas.Left="{Binding XPosition, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
- <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}"/>
- </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:...aber es funktioniert immer noch nicht....
... In einem Projekt mit nur einem "starren" ViewModel funktioniert der Code einwandfrei.
Die Instanzen erstelle ich folgendermassen:
Und im XAML werden sie so angezeigt:
Die Klasse DataPiping sieht so aus:
VB.NET-Quellcode
- Imports System.Windows
- Namespace u
- Public Class DataPiping
- Public Shared ReadOnly DataPipesProperty As DependencyProperty = DependencyProperty.RegisterAttached("DataPipes", GetType(DataPipeCollection), GetType(DataPiping), New Windows.UIPropertyMetadata(Nothing))
- Public Shared Sub SetDataPipes(ByVal o As DependencyObject, ByVal value As DataPipeCollection)
- o.SetValue(DataPipesProperty, value)
- End Sub
- Public Shared Function GetDataPipes(ByVal o As DependencyObject) As DataPipeCollection
- Return CType(o.GetValue(DataPipesProperty), DataPipeCollection)
- End Function
- End Class
- Public Class DataPipeCollection
- Inherits FreezableCollection(Of DataPipe)
- End Class
- Public Class DataPipe
- Inherits Freezable
- Public Property Source As Object
- Get
- Return CObj(GetValue(SourceProperty))
- End Get
- Set(ByVal value As Object)
- SetValue(SourceProperty, value)
- End Set
- End Property
- Public Shared ReadOnly SourceProperty As DependencyProperty = DependencyProperty.Register("Source", GetType(Object), GetType(DataPipe), New FrameworkPropertyMetadata(Nothing, New PropertyChangedCallback(AddressOf OnSourceChanged)))
- Private Shared Sub OnSourceChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
- CType(d, DataPipe).OnSourceChanged(e)
- End Sub
- Protected Overridable Sub OnSourceChanged(ByVal e As DependencyPropertyChangedEventArgs)
- Target = e.NewValue
- End Sub
- Public Property Target As Object
- Get
- Return CObj(GetValue(TargetProperty))
- End Get
- Set(ByVal value As Object)
- SetValue(TargetProperty, value)
- End Set
- End Property
- Public Shared ReadOnly TargetProperty As DependencyProperty = DependencyProperty.Register("Target", GetType(Object), GetType(DataPipe), New FrameworkPropertyMetadata(Nothing))
- Protected Overrides Function CreateInstanceCore() As Freezable
- Return New DataPipe()
- End Function
- End Class
- End Namespace
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()