WPF DataGrid 绑定到子类中的 属性
WPF DataGrid binding to property in subclass
我正在努力思考如何将数据网格列与子类中的数据正确绑定。为了解决问题,我做了一个小示例,如果解决了,将极大地帮助代码工作。
这里是类定义的:
public class SubItem
{
public string Data { get; set; }
}
public class Item
{
public int Value { get; set; }
public SubItem Data { get; set; }
}
然后我创建一个 observablecollection 如下:
public class IntData : ObservableCollection<Item>
{
public IntData() : base()
{
Item i = new Item() { Value = 56, Data = new SubItem() { Data = "testdata" } };
Add(i);
}
}
这是我的主窗口代码:
public partial class MainWindow : Window
{
public IntData Integers { get; set; }
public MainWindow()
{
Integers = new IntData();
InitializeComponent();
dataGrid1.ItemsSource = Integers; // This is an important line
}
}
XAML 代码保持简单:
<DataGrid Name="dataGrid1" AutoGenerateColumns="False" Margin="12">
<DataGrid.Columns>
<DataGridTextColumn Header="Integers" Binding="{Binding Value}"/>
<DataGridTextColumn Header="Data" Binding="{Binding Data}"/>
</DataGrid.Columns>
</DataGrid>
运行 以上,您会注意到 Integers 正在正常工作,但不是 Data 列。
任何人关于如何使该列显示数据的任何想法 属性?
提前致谢!
修复它的最简单方法是覆盖 SubItem
class 和 return Data
属性[=21 中的 ToString()
方法=]
public class SubItem
{
public string Data { get; set; }
public override string ToString()
{
return Data;
}
}
另一个选项是更新 DataGridTextColumn
绑定并使用 Data
属性 的 Data
sub-属性 from Item
class(您可能需要更新命名:))
<DataGridTextColumn Header="Data" Binding="{Binding Data.Data}"/>
更复杂的选择是使用 DataGridTemplateColumn
并定义您自己的模板来表示数据
<DataGridTemplateColumn Header="Data">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Data.Data}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我正在努力思考如何将数据网格列与子类中的数据正确绑定。为了解决问题,我做了一个小示例,如果解决了,将极大地帮助代码工作。
这里是类定义的:
public class SubItem
{
public string Data { get; set; }
}
public class Item
{
public int Value { get; set; }
public SubItem Data { get; set; }
}
然后我创建一个 observablecollection 如下:
public class IntData : ObservableCollection<Item>
{
public IntData() : base()
{
Item i = new Item() { Value = 56, Data = new SubItem() { Data = "testdata" } };
Add(i);
}
}
这是我的主窗口代码:
public partial class MainWindow : Window
{
public IntData Integers { get; set; }
public MainWindow()
{
Integers = new IntData();
InitializeComponent();
dataGrid1.ItemsSource = Integers; // This is an important line
}
}
XAML 代码保持简单:
<DataGrid Name="dataGrid1" AutoGenerateColumns="False" Margin="12">
<DataGrid.Columns>
<DataGridTextColumn Header="Integers" Binding="{Binding Value}"/>
<DataGridTextColumn Header="Data" Binding="{Binding Data}"/>
</DataGrid.Columns>
</DataGrid>
运行 以上,您会注意到 Integers 正在正常工作,但不是 Data 列。 任何人关于如何使该列显示数据的任何想法 属性? 提前致谢!
修复它的最简单方法是覆盖 SubItem
class 和 return Data
属性[=21 中的 ToString()
方法=]
public class SubItem
{
public string Data { get; set; }
public override string ToString()
{
return Data;
}
}
另一个选项是更新 DataGridTextColumn
绑定并使用 Data
属性 的 Data
sub-属性 from Item
class(您可能需要更新命名:))
<DataGridTextColumn Header="Data" Binding="{Binding Data.Data}"/>
更复杂的选择是使用 DataGridTemplateColumn
并定义您自己的模板来表示数据
<DataGridTemplateColumn Header="Data">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Data.Data}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>