Данные Wpf связывают список со вложенным классом - PullRequest
0 голосов
/ 13 мая 2011

Итак, у меня есть следующий сценарий:

У меня есть часть класса модели представления следующим образом:

  public class ResourceModuleAccess
{ 
    public class ModuleAccess
    {
        ResourceModule module;
        Mode mode;
    }

    public List<DisplayAccess> Items
    {
        get
        {
            var result = from g in groups
                         join p in groupAccess on g.GroupID equals p.GroupId into outer
                         from p in outer.DefaultIfEmpty()
                         select new DisplayAccess { Name = g.Name, Module = (p == null) ? ResourceModule.None : p.Module };
            var output =  result.ToList();
            return output; 
        }

    }

и я пытаюсь привязать элементы к списку для отображения имени и модуля

<ListBox ItemsSource="{Binding ModulesAccess.Items}">                   
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Label Content="{Binding DisplayAccess.Name}"></Label>
                                <CheckBox></CheckBox>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>                          
                </ListBox>

Список правильно отображается для элементов, поэтому он нашел коллекцию, но не может сопоставить свойства метке

Я тоже пытался

   <DataTemplate DataType="{x:Type DisplayAccess}">
                            <StackPanel Orientation="Horizontal">
                                <Label Content="{Binding Name}"></Label>
                                <CheckBox></CheckBox>
                            </StackPanel>
                        </DataTemplate>

но это не сборка: он говорит, что не может найти открытый тип DisplayAccess.

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Ваш ModulesAccess.Items является списком DisplayAccess, поэтому ваш контекст данных для шаблона элемента вашего списка уже будет одним DisplayAccess объектом.

Учитывая это, вы должны иметь возможность просто связать Name вместо DisplayAccess.Name в вашем первом примере.

ваш второй пример также должен работать, но вам может потребоваться указать типс пространством имен, например

<DataTemplate DataType="{x:Type yourns:DisplayAccess}">
    ....
</DataTemplate>

Кроме того, вы часто найдете ошибки связывания, которые записываются в окно «Вывод» в Visual Studio (меню «Отладка / Windows / Вывод»), которое может дать вам указатель на то, чтопошло не так.

0 голосов
/ 13 мая 2011

Для людей с подобной проблемой: поля доступа к дисплею должны быть свойствами.

 public class DisplayAccess
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    private ResourceModule module;

    public ResourceModule Module
    {
        get { return module; }
        set { module = value; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...