Silverlight 使绑定到数组项的列可编辑
Silverlight make a column bound to a array item editable
我的 Silverlight 应用程序中有一个 DataGrid
,它绑定到一个对象数组。由于列是可变的,我将它们中的每一个绑定到一个数组项:
我的对象:
public class TravelTimeItem
{
public string From { get; set; }
public int[] Times { get; set; }
}
我用它构建我的网格:
grdTravelTime.Columns.Clear();
grdTravelTime.Columns.Add(new DataGridTextColumn() {
Binding = new Binding("From")
});
for (int i=0; i < amountOfColumns; i++)
grdTravelTime.Columns.Add(new DataGridTextColumn()
{
Binding = new Binding("Times[" + i.ToString() + "]"),
Header = (i + 1).ToString()
});
grdTravelTime.AutoGenerateColumns = false;
grdTravelTime.IsReadOnly = false;
grdTravelTime.ItemsSource = GetItems();
上面的代码有效,我可以看到所有数组值都正确显示在网格中,但我需要这些值是可编辑的。绑定到简单字符串 属性 的 "From" 列是可编辑的,但绑定到数组项的其他列不可编辑。
如何使此列可编辑?是否有其他选项来绑定此列,考虑到每次列的数量可能不同。
How can I make this columns editable?
您需要将 int
替换为具有 属性 和 public 的自定义类型 setter:
public class TravelTimeItem
{
public string From { get; set; }
public YourType[] Times { get; set; }
}
public class YourType
{
public int Value { get; set; }
}
...
for (int i = 0; i < amountOfColumns; i++)
grdTravelTime.Columns.Add(new DataGridTextColumn()
{
Binding = new Binding("Times[" + i.ToString() + "].Value"),
Header = (i + 1).ToString()
});
我的 Silverlight 应用程序中有一个 DataGrid
,它绑定到一个对象数组。由于列是可变的,我将它们中的每一个绑定到一个数组项:
我的对象:
public class TravelTimeItem
{
public string From { get; set; }
public int[] Times { get; set; }
}
我用它构建我的网格:
grdTravelTime.Columns.Clear();
grdTravelTime.Columns.Add(new DataGridTextColumn() {
Binding = new Binding("From")
});
for (int i=0; i < amountOfColumns; i++)
grdTravelTime.Columns.Add(new DataGridTextColumn()
{
Binding = new Binding("Times[" + i.ToString() + "]"),
Header = (i + 1).ToString()
});
grdTravelTime.AutoGenerateColumns = false;
grdTravelTime.IsReadOnly = false;
grdTravelTime.ItemsSource = GetItems();
上面的代码有效,我可以看到所有数组值都正确显示在网格中,但我需要这些值是可编辑的。绑定到简单字符串 属性 的 "From" 列是可编辑的,但绑定到数组项的其他列不可编辑。
如何使此列可编辑?是否有其他选项来绑定此列,考虑到每次列的数量可能不同。
How can I make this columns editable?
您需要将 int
替换为具有 属性 和 public 的自定义类型 setter:
public class TravelTimeItem
{
public string From { get; set; }
public YourType[] Times { get; set; }
}
public class YourType
{
public int Value { get; set; }
}
...
for (int i = 0; i < amountOfColumns; i++)
grdTravelTime.Columns.Add(new DataGridTextColumn()
{
Binding = new Binding("Times[" + i.ToString() + "].Value"),
Header = (i + 1).ToString()
});