【问题标题】:Bind a List of items to a Datagrid cell将项目列表绑定到 Datagrid 单元格
【发布时间】:2023-04-03 10:57:01
【问题描述】:

我在 WPF 中有一个 DataGrid,它应该显示书籍的集合。 书是这样的:

public class Book
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private string title = "";
    public string Title
    {
        get
        {
            return title;
        }
        set
        {
            title = value;
            OnPropertyChanged("Title");
        }
    }

    private List<Writer> writers = new List<Writer>();
    public List<Writer> Writers
    {
        get
        {
            return writers;
        }
        set
        {
            writers = value;
            OnPropertyChanged("Writers");
        }
    }

    public Book() { }
    public Book(string bookTitle) 
    {
        this.Title = bookTitle;
    }
}

这里是 Writer 类:

    public class Writer
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private string fullname = "";
    public string Fullname
    {
        get
        {
            return fullname;
        }
        set
        {
            fullname = value;
            OnPropertyChanged("Fullname");
        }
    }

    private string forename = "";
    public string Forename
    {
        get
        {
            return forename;
        }
        set
        {
            forename = value;
            OnPropertyChanged("Forename");
        }
    }

    private string surename = "";
    public string Surename
    {
        get
        {
            return surename;
        }
        set
        {
            surename = value;
            OnPropertyChanged("Surename");
        }
    }

    public Writer() { }
    public Writer(string writersForename, string writersSurename) 
    {
        this.Forename = writersForename;
        this.Surename = writersSurename;
        this.Fullname = string.Format("{0} {1}", this.Forename, this.Surename);
    }
}

现在我想在 DataGrid 的单个单元格中显示作者。像这样的:

Title      |     Writer
------------------------
Book1      |     Writer1
           |     Writer2
------------------------
Book2           Writer1
...

但如果我试图将列表绑定到单元格,它只会在单元格中显示“集合”作为值。

这是我正在使用的 XAML:

<ToolKit:DataGrid x:Name="dataGrid1" DataContext="{StaticResource ItemCollectionViewSource}" IsReadOnly="True" ItemsSource="{Binding}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" AutoGenerateColumns="False" >
        <ToolKit:DataGrid.Columns>
            <ToolKit:DataGridTextColumn Header="Title" Binding="{Binding Path=Title}" />
            <ToolKit:DataGridTextColumn Header="Writer" Binding="{Binding Path=Writers}" />
        </ToolKit:DataGrid.Columns>
    </ToolKit:DataGrid>

我已经尝试将单元格绑定到“Writers.Fullname”,但这也不起作用。 你能帮帮我吗,我找不到这种绑定的任何例子。

问候

体系结构

【问题讨论】:

    标签: c# wpf binding datagrid


    【解决方案1】:

    您可以使用ItemsControl 创建DataGridTemplateColumn 列,该列将绑定到Writers 列表:

    <ToolKit:DataGridTemplateColumn Header="Writer">
       <ToolKit:DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
             <ItemsControl ItemsSource="{Binding Writers}" DisplayMemberPath="Fullname"/>
          </DataTemplate>
       </ToolKit:DataGridTemplateColumn.CellTemplate>
    </ToolKit:DataGridTemplateColumn>
    

    【讨论】:

    • 好东西。非常感谢你,这正是我错过的。
    • 没问题@SyLuS。很高兴它有帮助
    猜你喜欢
    • 2018-10-19
    • 2014-06-17
    • 1970-01-01
    • 2013-08-06
    • 2014-08-13
    • 2018-07-01
    • 2013-08-18
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多