В списке привязок Expression Blend не перечислены свойства интерфейса для привязки - PullRequest
1 голос
/ 09 сентября 2010

Сделан гораздо более простой пример, надеюсь, кто-то может последовать этому и помочь мне

Вот мой код.

ViewModel

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; }
    }

}

Person

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; }
}

View

<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, если я вставляю текстовый блок, нажмите «Дополнительные параметры» -> Binding Data... -> Контекст данных Я вижу и InterfacePerson, и NonInterfacePerson в качестве параметров для привязки.Однако у NonInterfacePerson есть небольшая стрелка, показывающая другие свойства, к которым я могу привязаться.Возраст и имя в этом случае.

То же самое происходит, когда я устанавливаю d: DataContext в ad: 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 Ответ

1 голос
/ 10 сентября 2010

Я почти уверен, что они используют отражение для идентификации свойств объекта, а Интерфейс - это всего лишь описание компоновки, а не реального объекта, поэтому не имеет отраженных свойств.

Надеюсь, это поможет.

...