Expression Blend绑定列表未列出绑定的接口属性

时间:2010-09-09 00:40:43

标签: c# wpf expression-blend

做了一个更简单的例子,希望有人可以关注这个并帮助我

这是我的代码。

视图模型

public class ViewModel
{
    private Person _noninterfacePerson;
    private IPerson _interfacePerson;

    public ViewModel()
    {
        _noninterfacePerson = new Person();
        _interfacePerson = new Person();
    }

    public Person NonInterfacePerson
    {
        get { return _noninterfacePerson; }
    }

    public IPerson InterfacePerson
    {
        get { return InterfacePerson; }
    }

}

public class Person : IPerson
{
    public Person()
    {

    }

    public string Name
    {
        get;
        set;
    }

    public int age
    {
        get;
        set;
    }

}

IPerson

public interface IPerson
{
    int age { get; set; }
    string Name { get; set; }
}

查看

<Window x:Class="WpfApplication2.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication2"
        mc:Ignorable="d"
 Title="MainWindow" Height="350" Width="525">
 <Grid d:DataContext="{d:DesignInstance local:ViewModel}">

 </Grid>
</Window>

在Expression Blend中,如果我插入文本块,请单击“高级选项” - &gt;数据绑定... - &gt;数据上下文我将InterfacePerson和NonInterfacePerson视为绑定的选项。但是,NonInterfacePerson有一个小箭头显示我可以绑定的其他属性。这种情况下的年龄和姓名。

当我将d:DataContext设置为d:DesignData Source时,会发生同样的事情。我没有在这个例子中使用它,因为它更复杂。但这就是我真正希望这个工作的地方,因为那时我可以看到所有的绑定选项并拥有样本数据。

如果我在我的观点中这样做:

<Window x:Class="WpfApplication2.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication2"
        mc:Ignorable="d"
 Title="MainWindow" Height="350" Width="525">
 <Window.Resources>
 <local:ViewModel x:Key="DummyVM"/>
 </Window.Resources>
 <Grid d:DataContext="{Binding Source={StaticResource DummyVM}}">

 </Grid>
</Window>

然后我可以看到InterfacePerson的属性,但是,我仍然无法轻松实现我想使用d:DesignData的样本数据。

应该注意的是,在所有情况下,如果我手动输入路径它可以正常工作。这纯粹是让Blend显示它们以便更容易设置绑定。

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

我很确定他们使用反射来识别对象的属性,而Interface只是布局的描述,而不是真实对象,所以没有反射属性。

希望这有帮助。