Как связать список <string>с DataGridColumn? - PullRequest
1 голос
/ 09 марта 2012

У меня есть следующий XAML:

<DataGrid Name="nodeDataGrid" ItemsSource="{Binding NodeList}" AutoGenerateColumns="False" RowBackground="White"
            AlternatingRowBackground="AliceBlue" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
            Background="Silver" Margin="0,34,10,10" IsReadOnly="True" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" CanUserSort="True" SortDirection="Ascending" CellStyle="{StaticResource CellStyle}" />
            <DataGridTextColumn Header="Category" Binding="{Binding Path=Category}" Width="*" />
            <DataGridTemplateColumn Header="Children">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ListBox>
                            <TextBlock Text="{Binding}" />
                        </ListBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

и код позади:

    private ServiceMapViewModel smViewModel = new ServiceMapViewModel();

    public MainWindow()
    {
        InitializeComponent();
        this.Loaded += (s, e) =>
            {
                this.DataContext = smViewModel;

            };
    }

В ServiceMapViewModel у меня есть NodeList вроде: List

И Node:

    public string Name { get; set; }

    public string Category { get; set; }

    public string Group { get; set; }

    public List<string> Children { get; set; }

    public List<string> Parents { get; set; }

Мой вопрос: как связать список со свойством Chidren?

Ответы [ 2 ]

3 голосов
/ 09 марта 2012

Children - это коллекция в текущем контексте, поэтому вам необходимо использовать следующее:

<ListBox ItemsSource="{Binding Children}">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <TextBlock Text="{Binding}" />
     </DataTemplate>
   </ListBox.ItemTemplate> 
</ListBox>
0 голосов
/ 09 марта 2012
<TextBlock Text="{Binding Children}" />

Обратите внимание, что вы не будете получать обновления свойства, отраженного в привязке, если вы не реализуете INotifyPropertyChanged в своем классе Node.

Редактировать: Ой, подождите, вы связываете массив в массиве. Тогда вам понадобится элемент управления, который может связывать коллекцию, а не TextBlock. Или где вы пытаетесь просто привязать один узел?

Может быть, вы сможете немного лучше объяснить, что вы пытаетесь сделать.

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