【问题标题】:Define Blend Expression ViewModel definition for RelativeSource binding为 RelativeSource 绑定定义 Blend Expression ViewModel 定义
【发布时间】:2015-05-26 09:55:40
【问题描述】:

我有一个 UserControl (MyCompositeView),我在其中添加了一些其他 UserControls (MyDetailView)。为了获得智能感知和重构能力,我在 CompositeView 中添加了 d:DataContext 中的 xaml

为了在向 UserControl 添加新的 DataContext 时对其进行操作,我将 Visiblity 绑定到 RelativeSource(我的 CompositeViewModel)。不幸的是,与 MyCompositeViewModel 的匹配不适用于编辑器中的此绑定。

有没有办法让 Visual Studio 知道我的 DataContextDataContext.DetailsIsVisible 来自 MyCompositeViewModel 类型?

<UserControl 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    x:Class="Example.MyCompositeView"
    d:DataContext="{d:DesignInstance Type=MyCompositeViewModel}"
    d:DesignHeight="300"
    d:DesignWidth="300"
    mc:Ignorable="d">

     <Grid>
        <detail:MyDetailView 
            DataContext="{Binding Path=DetailViewModel}"
            Visibility="{Binding RelativeSource={RelativeSource FindAncestor,
                AncestorType={x:Type UserControl}},
                Path=DataContext.DetailsIsVisible,
                Converter={StaticResource BooleanToVisibilty}}" />
     </Grid>

 </UserControl>

--

public class MyCompositeViewModel : IMyCompositeViewModel {

    public bool DetailisVisible{get;set;}

    public MyDetailViewModel DetailViewModel { get; }
}   

【问题讨论】:

    标签: wpf xaml mvvm user-controls blend


    【解决方案1】:

    尝试按元素名称绑定:

    <UserControl 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        x:Class="Example.MyCompositeView"
        x:Name="root"
        d:DataContext="{d:DesignInstance Type=MyCompositeViewModel}"
        d:DesignHeight="300"
        d:DesignWidth="300"
        mc:Ignorable="d">
    
         <Grid>
            <detail:MyDetailView 
                DataContext="{Binding Path=DetailViewModel}"
                Visibility="{Binding ElementName="root"},
                    Path=DataContext.DetailsIsVisible,
                    Converter={StaticResource BooleanToVisibilty}}" />
         </Grid>
    
     </UserControl>
    

    或翻转属性顺序:

    <UserControl 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        x:Class="Example.MyCompositeView"
        d:DataContext="{d:DesignInstance Type=MyCompositeViewModel}"
        d:DesignHeight="300"
        d:DesignWidth="300"
        mc:Ignorable="d">
    
         <Grid>
            <detail:MyDetailView            
                Visibility="{Binding DetailsIsVisible, Converter={StaticResource BooleanToVisibilty}}" 
                DataContext="{Binding DetailViewModel}"/>
         </Grid>
    
     </UserControl>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多