привязка основной детали в WPF - PullRequest
1 голос
/ 11 февраля 2012

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

public class ViewModel
{
    public dataclass data { get; set; }

    public ViewModel()
    {
        data = new dataclass();
        master a_master = new master();
        a_master.mastername = "hello";
        detail a_detail = new detail();
        a_detail.detailname = "goodbye";
        data.details.Add(a_detail);
        data.Add(a_master);
    }
}


public class dataclass : ObservableCollection<master>
{
   public ObservableCollection<detail> details { get; set; }

    public dataclass()
    {
        details = new ObservableCollection<detail>();
    }
}


public class master
{
    public string mastername { get; set; }


}


public class detail
{
    public string detailname { get; set; }
}

И в моем XAML я связываю так:

<Window x:Class="md.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:md.viewmodels"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <vm:ViewModel/>
    </Window.DataContext>
    <StackPanel Orientation="Vertical" >
        <ListView ItemsSource="{Binding Path=data}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="master" DisplayMemberBinding="{Binding mastername}"/>
                </GridView>
            </ListView.View>
        </ListView>
        <ListView ItemsSource="{Binding Path=data/details}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="detail" DisplayMemberBinding="{Binding detailname}"/>
                </GridView>
            </ListView.View>
        </ListView>
    </StackPanel>
</Window>

1 Ответ

5 голосов
/ 11 февраля 2012

Попробуйте

<ItemsSource="{Binding Path=data.details}">

вместо

<ItemsSource="{Binding Path=data/details}">

Я думаю, что вы пытались достичь своего рода сценария мастер / детализация с привязкой к иерархическим данным, как описано в Как: использовать шаблон мастер-детализации с иерархическими данными . Фактически, пока у вас есть ObservableCollection<details> свойство as класса, производного от ObservableCollection<master>, оно не является иерархическим, и, следовательно, / в выражении привязки не будет работать. См. Синтаксис XAML PropertyPath , раздел Обход источника (связывание с иерархиями коллекций) для получения подробной информации о /.

Также существуют общепринятые соглашения для использование заглавных букв в C #, в которых говорится, что вы должны использовать регистр Pascal для открытых типов, таких как классы и свойства здесь.

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