在实现主/子视图和自定义依赖项属性时,我遇到了一个奇怪的问题。
在我的masterView中,我在XAML中以声明方式绑定视图模型,如下所示:
DataContext="{Binding MainViewModelProperty, Source={StaticResource Locator}}"
我的MainViewModel正在公开一个可观察的集合,我将它绑定到ItemsControl,如下所示:
<ItemsControl ItemsSource="{Binding Lists}" Height="490" Canvas.Top="10" Width="70">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Canvas>
<local:TaskListControl Canvas.Left="{Binding ListLeft}"
Canvas.Top="{Binding ListTop}"
Width="{Binding ListWidth}"
Height="{Binding ListHeight}"
ListDetails="{Binding}"/>
</Canvas>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
TaskListControl依次声明并绑定到它的ViewModel,我还为ListDetails属性定义了一个依赖属性。
未设置ListDetails属性,如果我删除对其viewmodel的声明性引用,则依赖属性的回调会被触发。
是否存在与声明性绑定到viewmodel和definig依赖属性的冲突?
我非常喜欢MVVM Light的可混合性,并希望坚持这个问题,所以任何帮助都会被提升。
如果您想收到我项目的来源,请询问
答案 0 :(得分:0)
我不确定我是否完全理解你的问题,但让我们试着猜猜。当你谈到“声明性地绑定到viewmodel”时,你实际上是指“命令性地”,就像在“代码中”而不是“在XAML“?
如果是这种情况,那么您需要了解这将覆盖来自父级的DataContext继承,而ListDetails属性现在引用TaskListControl DataContext,而不再引用DataTemplate的DataContext。
这很容易改变,例如:
<ItemsControl ItemsSource="{Binding Lists}"
Height="490"
Canvas.Top="10"
Width="70">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Canvas x:Name="RootPanel">
<local:TaskListControl Canvas.Left="{Binding ListLeft}"
Canvas.Top="{Binding ListTop}"
Width="{Binding ListWidth}"
Height="{Binding ListHeight}"
ListDetails="{Binding ElementName=RootPanel,
Path=DataContext}"/>
</Canvas>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
那会有用吗? 劳伦