繁体   English   中英

自定义控件中的DataTemplate

[英]DataTemplate in Custom Control

我有一个自定义控件(NavigationContentCtrl),用于显示各种View / ViewModel。

在自定义控件的参考资料中,给定ViewModel的数据模板指向相应的View(为简单起见,我仅包括一对VM / V):

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary>
        <DataTemplate DataType="{x:Type vm:SampleMainContentViewModel}">
            <views:SampleMainContentView/>
        </DataTemplate>
    </ResourceDictionary>
</ResourceDictionary.MergedDictionaries>

还有一个绑定到基础Dependency属性的ContentPresenter:

<ContentPresenter Grid.Column="1"
                  Content="{Binding CurrentContentViewModel,
                                    RelativeSource={RelativeSource TemplatedParent}}"/>

在支持Dependency属性(CurrentContentViewModel)中,如果我在该属性中实例化VM,则控件将找到相应的View并正确显示它。

例如,使用“ SampleMainContentViewModel”,可以很好地工作:

        // Using a DependencyProperty as the backing store for CurrentContentViewModel.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty CurrentContentViewModelProperty =
        DependencyProperty.Register("CurrentContentViewModel", typeof(object), 
            typeof(NavigationContentCtrl), 
            new FrameworkPropertyMetadata(new SampleMainContentViewModel(), 
                FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

但是,如果我在使用自定义控件的实例时尝试设置VM(例如在MainWindow中):

<Grid>
    <controls:NavigationContentCtrl
        CurrentContentViewModel="{x:Type vm:SampleMainContentViewModel}"
        />
</Grid>

然后,我得到的只是VM的字符串名称:

在此处输入图片说明

非常感谢任何可以提供帮助的人。

感谢@Clemens提示我重新启动大脑。

在控件的实例化中(例如在MainWindow中),控件的依赖项属性应绑定到属性:

<Grid>
    <controls:NavigationContentCtrl            
        CurrentContentViewModel="{Binding ContentViewModel}"
        />
</Grid>

属性ContentViewModel在基础MainWindowViewModel中声明和设置:

public object ContentViewModel { get; set; } = new SampleMainContentViewModel();

此外,可以简化Dependency属性以删除BindsTwoWayByDefault语法,并且可以使用更简单的TemplateBinding语法设置ContentPresenter的Content属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM