【发布时间】:2018-04-12 21:16:40
【问题描述】:
我有一个简单的一维数组:
class Cylinder {
private float[] vector = new float[3] {4,5,6};
public float[] Vector = { get; set; }
}
在我的 XAML 中,我创建了一个带有一些简单绑定的 DataGrid:
<Grid x:Name="MyGrid>
<DataGrid ItemsSource="{Binding Vector, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=.}"/>
<DataGridTextColumn Binding="{Binding Path=.}"/>
<DataGridTextColumn Binding="{Binding Path=.}"/>
</DataGrid.Columns>
</DataGrid>
<Grid>
然后我将MyGrid 的DataContext 设置为Cylinder 类的一个实例。窗口显示DataGrid 控件,但我有两个问题:
-
DataGrid填充了正确的数据,但方式很奇怪。我得到一个 3x3 网格,第一行全是“4”,第二行全是“5”,第三行全是“6”。 - 当我尝试编辑 9 个单元格中的任何一个时,出现异常:
双向绑定需要 Path 或 XPath
我想我可以只制作三个单独的TextBox 控件,但我认为这样会更优雅。
【问题讨论】:
-
3 列绑定是相同的,那么您为什么希望它们显示不同的信息呢?啊...您是否期望在一行中看到 4 5 6?不,集合中的每个项目代表一行。
-
至于第二点“当我尝试编辑任何 (9!) 个单元格时,我得到一个异常“双向绑定需要 Path 或 XPath”。”,没有明确的设置器为向量场中的值定义。
-
我明白了@Richardissimo 关于相同列绑定的说明,我意识到这行不通,但想不出更好的实现。
-
是的,我希望将 4 5 和 6 显示为单行。如果集合中的每个项目代表一行,那么似乎我需要一个 3 项目数组的集合?而我的收藏恰好有 1 个项目(因此只有一行)?我可以实际使用 3 项数组,还是需要创建具有实际字段的对象或结构,并将对象/结构放入集合中?
-
你可以在 WPF 中做你喜欢做的事......你只需要在问题中提出这个问题。您可以使用 ItemsControl,并将 PanelTemplate 定义为水平 StackPanel,然后在 ItemTemplate 中放置一个 TextBox。这将适用于您现有的数据结构。
标签: c# arrays wpf binding datagrid