[英]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);
}
}
這是我的 MainWindow 代碼:
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 列卻沒有。 任何人關於如何使該列顯示 Data 屬性的任何想法? 提前致謝!
修復它的最簡單方法是覆蓋SubItem
class 中的ToString()
方法並返回Data
屬性
public class SubItem
{
public string Data { get; set; }
public override string ToString()
{
return Data;
}
}
另一個選項是更新DataGridTextColumn
綁定並使用來自Item
class 的Data
屬性的Data
子屬性(您可能需要更新命名:))
<DataGridTextColumn Header="Data" Binding="{Binding Data.Data}"/>
更復雜的選項是使用DataGridTemplateColumn
並定義您自己的模板來表示數據
<DataGridTemplateColumn Header="Data">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Data.Data}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.