Ich habe vor kurzem begonnen, versuchen, Sinn von MVVM zu machen und bin mit der MvvmFoundation-Klassen. Ich versuche, ein DataTemplate für eine View Model-Klasse zu verwenden, um die Ansicht anzuzeigen. Der XAML-Code ist unten: TVM ist eine Eigenschaft des Typs TrackViewModel.
Die TrackView, die im Stack-Panel mit einem DataContext platziert wird, wird korrekt angezeigt. Die Version der Inhaltssteuerung wird als leeres TrackViewModel dargestellt.
<Window.Resources>
<DataTemplate DataType="{x:Type vm:TrackViewModel}" >
<v:TrackView/>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ContentControl Width="200" Height="50" Content="{Binding Path=TVM, UpdateSourceTrigger=PropertyChanged}"/>
<v:TrackView DataContext="{Binding TVM}"/>
</StackPanel>
Es scheint, dass ich eine Verknüpfung zwischen dem TrackView im DataTemplate und dem instansierten TrackViewModel, TVM, nicht eingerichtet habe. Folglich zeigen die PropertyChangedEventHandler für TrackViewModel als Null in der nicht funktionierenden Fall aber sind in Ordnung, wenn ich direkt den Datacontext festgelegt.
Jeder Gedanke ist sehr willkommen.
Die TrackView XAML sieht wie folgt aus:
<UserControl.DataContext>
<vm:TrackViewModel/>
</UserControl.DataContext>
<UserControl.Resources>
<LinearGradientBrush x:Key="barBackgroundBrush" StartPoint="0,0" EndPoint="0,1" Opacity="0.7">
<GradientStop Offset="0" Color="Blue"/>
<GradientStop Offset="0.3" Color="Aquamarine"/>
<GradientStop Offset="1" Color="Blue"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="barTrackingBrush" StartPoint="0,0" EndPoint="0,1" Opacity="0.7">
<GradientStop Offset="0" Color="Orange"/>
<GradientStop Offset="0.3" Color="OrangeRed"/>
<GradientStop Offset="1" Color="Orange"/>
</LinearGradientBrush>
<DataTemplate x:Key="RegionDataTemplate" >
<Border CornerRadius="5" BorderThickness="3" Background="{StaticResource barTrackingBrush}"
Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Canvas}}}"
Width="{Binding Path=Duration}">
<Border.RenderTransform>
<TranslateTransform X="{Binding Path=StartFrame}"/>
</Border.RenderTransform>
</Border>
</DataTemplate>
<UserControl.DataContext>
<vm:TrackViewModel/>
</UserControl.DataContext>
</UserControl.Resources>
<StackPanel>
<ItemsControl ItemsSource="{Binding Path=Regions, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" ItemTemplate="{StaticResource RegionDataTemplate}" VerticalAlignment="Center">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="{StaticResource barBackgroundBrush}" Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Panel}}}" VerticalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>