将ContentPresenter绑定到嵌套的ViewModel不能按预期工作

时间:2014-02-19 17:31:09

标签: winrt-xaml mvvmcross

目标:Windows应用商店 框架:MvvmCross

我将包含OtherViewModel的MyViewModel作为属性。

public class OtherViewModel : MvxViewModel
{
    public string Name { get; set; }
}

public class MyViewModel : MvxViewModel
{
    public string Id { get; set; }
    private OtherViewModel _theOther;

    public OtherViewModel TheOther
    {
        get { return _theOther; }
        set
        {
            _theOther = value;
            RaisePropertyChanged(() => TheOther);
        }
    }        
}

当我使用以下View(XAML,简化))时,ContentPresenter的内容将始终为null(使用WinRTXamlToolkit.Debugging.DC.ShowVisualTree()进行调查)

<views:MvxStorePage>
    <Grid>
        <TextBlock Text="{Binding TheOther.Name}"/>
        <ContentPresenter Content="{Binding TheOther}" ContentTemplate="{...}"/>
    </Grid>
</views:MvxStorePage>

但是,当我按照以下方式定义视图(将Content绑定到TextBlock DataContext)时,它可以工作。

<views:MvxStorePage>
    <Grid>
        <TextBlock Name="tb" DataContext="{Binding TheOther}" Text="{Binding Name}"/>
        <ContentPresenter Content="{Binding DataContext, ElementName=tb}" ContentTemplate="{...}"/>
        </Grid>
    </views:MvxStorePage>

知道为什么吗?

2 个答案:

答案 0 :(得分:3)

ContentPresenter通常用于ControlTemplate。

改为使用ContentControl。

答案 1 :(得分:0)

  

您通常在a的ControlTemplate中使用ContentPresenter   ContentControl指定要添加内容的位置。一切   ContentControl类型默认具有ContentPresenter   的ControlTemplate。

有关详细信息,请参阅此link