WPF: связывание с заголовком и подпунктами - PullRequest
1 голос
/ 21 мая 2010

У меня возникли проблемы при попытке изучить WPF. То, что я пытаюсь сделать, это связать класс, который имеет строку и массив строк. Я хотел бы связать строку как заголовок, а массив - как содержимое экспандера, но у меня возникают трудности. Чего мне не хватает, чтобы заставить эту работу? Любая помощь будет оценена, TIA.

Это код, который у меня есть:

XAML

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
    <ListBox Grid.Column="0" Name="lbTopics" ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Expander Header="{Binding Path=TopicName}" >
                    <Expander.Content>
                        <ListBox>
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <Label Content="{Binding Path=(ItemName)}" Width="120px" Height="32px" Foreground="Black" />
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                    </Expander.Content>
                </Expander>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

C #

namespace WpfApplication1
{
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        lbTopics.DataContext = new Topics();
    }
}

public class Topics : ObservableCollection<Topic>
{
    public Topics()
    {
        for (int i = 0; i < 10; i++)
        {
            this.Add(new Topic(i));
        }
    }
}

public class Topic
{
    public Topic(int i)
    {
        TopicName = "Topic " + i;
        ItemName = new List<string>(10);

        for (int j = 0; j < 10; j++)
        {
            ItemName.Add(i + " - Item " + j);
        }
    }

    public string TopicName { get; set; }
    public List<string> ItemName { get; set; }
}
}

Ответы [ 2 ]

0 голосов
/ 21 мая 2010

Каскад DataTemplate плохо поддерживается в WPF. Вам нужно сгладить их и ссылаться на них по ключу.

<Grid>
  <Grid.Resources>
      <DataTemplate x:Key=TopicDataTemplate>
          <Expander Header="{Binding Path=TopicName}" >
              <Expander.Content>
                  <ListBox ItemTemplate={StaticResource TopicContentDataTemplate} />
              </Expander.Content>
          </Expander>
      </DataTemplate>

      <DataTemplate x:key=TopicContentDataTemplate>
          <Label 
              Content="{Binding Path=(ItemName)}" 
              Width="120px" 
              Height="32px" 
              Foreground="Black" />
      </DataTemplate>
  </Grid.Resources>

  <ListBox 
     Grid.Column="0" 
     Name="lbTopics" 
     ItemsSource="{Binding}" 
     ItemTemplate={StaticResource TopicDataTemplate} />
</Grid>
0 голосов
/ 21 мая 2010

Вы пропустили INotifyPropertyChanged.

Проверка это

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