【问题标题】:MVVM Light - master / child views and dependency propertiesMVVM Light - 主/子视图和依赖属性
【发布时间】:2010-04-19 11:10:33
【问题描述】:

在实现主/子视图和自定义依赖属性时遇到了一个奇怪的问题。

在我的 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 属性,如果我删除对其视图模型的声明性引用,则依赖属性的回调确实会被触发。

声明式绑定到视图模型和定义依赖属性是否存在冲突?

我真的很喜欢 MVVM Light 的可混合性,并希望能坚持解决这个问题,因此我们会感谢任何帮助。

如果您想收到我的项目的源代码,请询问

【问题讨论】:

  • 您的问题到底是什么?你说了很多关于几个属性,但至少我不明白所有这些属性的意图,我们也没有看到很多代码,你也没有说出具体的问题。也许你有,但我没有看到。您的问题“与视图模型和定义依赖属性的声明性绑定是否存在冲突?” 也很笼统......

标签: silverlight mvvm mvvm-light light


【解决方案1】:

我不确定我是否完全理解您的问题,但让我们尝试猜测一下。当您谈论“以声明方式绑定到视图模型”时,您实际上是指“必须”,如“在代码中”而不是“在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>

这行得通吗? 洛朗

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    相关资源
    最近更新 更多