WPF Binding Repository и модель - PullRequest
       0

WPF Binding Repository и модель

1 голос
/ 22 ноября 2011

У меня есть два класса, Handy (это модель с идентификатором, именем и годом) и HandyRepository.

Мой HandyRepository выглядит следующим образом:

 private IList<Handy> list = new List<Handy>(new Handy[] {
        new Handy{ ID=1, Name="Nokia ", Jahr=1999},
        new Handy{ ID=2, Name="HTC m", Jahr=2333},
        new Handy{ ID=3, Name="Samsung", Jahr=2134} });


    public IEnumerable<Handy> GetList()
    {
        return this.list;
    }

Теперь я хочу, чтобы эти данные были в ListBox в моем wpf-приложении, без написания кода в файле code-behind.

Моя попытка:

    xmlns:local="clr-namespace:Handy"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.DataContext>
        <local:Handy></local:Handy>
    </Grid.DataContext>

    <ListBox Name="lbBinding" ItemsSource="{Binding Name}"></ListBox>
</Grid>

Это не работает.У меня есть основная ошибка в рассуждениях?Как я могу решить эту проблему?

1 Ответ

1 голос
/ 22 ноября 2011

Вам не удалось привязать ItemsSource к фактической коллекции. Во-первых, вам нужно сделать коллекцию и дать ей ключ, по которому ее можно идентифицировать:

<x:Array x:Key="HandyList" Type="{x:Type local:Handy}">
    <local:Handy Name="Nokia " Jahr="1999" ID="1" />
    <local:Handy Name="HTC m", Jahr="2333" ID="2" />
</x:Array>

Ключом может быть любой понравившийся вам идентификатор.

Затем вам нужно указать ListBox, что нужно искать этот ключ:

<ListBox ItemsSource="{StaticResource HandyList}" Name="lbBinding" />

К сожалению, это не будет отображаться полностью корректно, так как вы получите стандартный ToString () класса Handy, который появляется в ListBox, поэтому вам нужно указать ему, как отображать:

<ListBox ItemsSource="{StaticResource HandyList}"
         Name="lbBinding"
         DisplayMemberPath="Name" />

Это обеспечит использование свойства Name в качестве источника строки для отображения в ListBox. Вы можете сделать более сложный рендеринг, предоставив пользовательский шаблон данных, если он вам нужен.

Конечно, существует немного реальных приложений, в которых вы определяете свой ItemsSource в XAML. Более нормально связывать со свойством DataContext представления. Самый простой способ сделать это - добавить свойство к самому представлению в его коде:

public List<Handy> HandyList { get; set; }

Затем установите представление как его собственный DataContext в своем конструкторе после вызова InitializeComponent ():

DataContext = this;

Затем вы можете привязать ItemsSource в XAML к {Binding Path = HandyList}. Не забудьте составить список и заполнить его, конечно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...