2010-04-19 26 views
0

当实现主/子视图和自定义依赖属性时,我遇到了一个奇怪的问题。MVVM Light - 主/子视图和依赖项属性

在我的马西德威我在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的声明引用,依赖属性的回调会被触发。

与声明式绑定viewmodels和definig依赖项属性有冲突吗?

我真的很喜欢MVVM Light的可混合性,并且想要坚持这个问题,所以任何帮助都会被认可。

如果您希望收到我的项目源,那么请让

+0

究竟是什么问题?你在谈论多个属性,但至少我不明白所有这些属性的意图,我们也看不到很多代码,也没有提到具体问题。也许你会,但我没看到它。你的问题*“是否存在与声明性绑定视图模型和definig依赖项属性的冲突?”*也很普通...... – gehho 2010-04-19 11:25:51

回答

0

我不知道我完全理解你的问题,但让我们尝试和guess.When请您谈一下“声明绑定到视图模型”,你是否确实是指“势在必行”,如“在代码中”而不是“在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> 

将这项工作? Laurent