【发布时间】:2020-08-05 20:46:39
【问题描述】:
我有以下 XAML 代码:
<DataGrid ItemsSource="{Binding TempParameters}" AutoGenerateColumns="False" CanUserAddRows="False" Height="100" Name="TempParameterGrid" CanUserSortColumns="False" Width="{Binding Source={StaticResource theWidth}}" MouseDown="SetSelectedGrid">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="ID" IsReadOnly="True" Binding="{Binding ID}"/>
<DataGridTemplateColumn Header="Parameter" IsReadOnly="False" >
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding name, Mode=TwoWay}" ItemsSource ="{Binding ParameterNames, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text ="{Binding name, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="*" Header="Start" IsReadOnly="False" Binding="{Binding start}"/>
<DataGridTextColumn Width="*" Header="End" IsReadOnly="False" Binding="{Binding end}"/>
<DataGridTextColumn Width="*" Header="Samples" IsReadOnly="False" Binding="{Binding samples}"/>
</DataGrid.Columns>
</DataGrid>
DataGrid 绑定到集合属性TempParameters。这是以下对象的集合。
public class TuneParameterRecord {
public int ID { get; set; }
public string name { get; set; }
public double start { get; set; }
public double end { get; set; }
public int samples { get; set; }
}
所有列都是可编辑的。但是我需要 name 列有一个预定义名称的列表。因此,我正在考虑提供一个带有可接受值列表的 ComboBox(虽然很多人会 指出,这个列表不能是枚举。我需要这是一个字符串列表)。这份名单是 在窗口数据上下文中提供。
我可以直接引用它,在 CellEditingTemplate 中提供相对源。我的问题是,当我尝试编辑相关列中的单元格时,我得到一个可以编辑文本框的光标 得到一个组合框。
为了得到组合框。我必须在附图中用红色表示的区域多次单击。第一张图片显示了可以使用光标编辑的单元格,而第二张图片显示了可以使用光标编辑的单元格 在我在指示的红色区域中单击多次后,图像具有组合框(虽然被屏蔽)。
【问题讨论】:
-
正如许多人也指出的那样,枚举可以很容易地转换为字符串列表。见stackoverflow.com/questions/14971631
-
This 是您绑定它的方式。
-
@RobertHarvey。感谢您指出这一点。当我研究这个问题时,我看到了关于绑定枚举的问题,这就是我提到它的原因。在这个阶段使用枚举会导致抽象链的一些重构,此时我没有绑定到正确数据的问题,但存在与定义的行为不同的问题。
标签: c# wpf xaml datagridtemplatecolumn