我最近開始嘗試理解MVVM,並使用MvvmFoundation類。我正在嘗試爲View Model類使用DataTemplate來顯示視圖。 XAML代碼如下所示:TVM是TrackViewModel類型的屬性。問題綁定使用DataTemplate查看ViewModel
使用DataContext放置在堆棧面板中的TrackView顯示正確。內容控制版本呈現爲空的TrackViewModel。
<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>
看來,我還沒有建立在DataTemplate中的軌跡視圖和instansiated TrackViewModel,TVM之間的聯繫。因此,TrackViewModel的PropertyChangedEventHandler在非工作情況下顯示爲空,但在直接設置Datacontext時沒有問題。
任何想法非常感謝。
的軌跡視圖XAML是如下:
<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>
這很棒,非常感謝。被我自己的測試代碼擊敗! 感覺有點違反直覺,它不會被過度騎行,但我明白爲什麼。再次感謝 – rjw 2010-11-01 23:48:22