【发布时间】:2014-05-09 15:58:23
【问题描述】:
我有一个使用 MVVV 的 WPF 应用程序;我有一个对象中的项目集合,ItemsCollection 中项目的属性之一是枚举,我希望用户能够使用下拉组合框或文本字段编辑 ItemsCollection 中项目的属性.集合显示在 DataGrid 中。我很难让组合框显示并允许用户以非常简单的方式(单击,键盘输入)与它和文本框进行交互。现在,需要在单元格中单击两次才能在“名称”字段中键入,我希望单击一下就可以允许用户编辑值。
还需要三个!点击展开使用我下面的方法打开组合框的内容。
我已经尝试了很多关于堆栈溢出的方法,但这是我发现的第一个解决方案,它甚至可以让枚举填充组合框并在我的属性枚举中调用集合
是否有人可以帮助我找到一种方法,允许用户通过单击给定行来更新条目(即单击文本字段进行编辑或单击 ComboBox 将其展开)我'现在已经在这里工作了几个小时,我觉得我对DataGrid 如何与焦点和选定的单元格/行一起工作的理解越来越少。我在下面有 XAML - 后面没有代码。
基本上:DataGrid,用户可以单击列中的单元格以选择单元格内的所有文本进行编辑,或者他们可以单击ComboBox 使其与枚举一起下拉,以便他们可以选择一个值并通过进一步单击将其应用于项目
<Window.Resources>
<ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="GetEnumValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="MockItem+ValidItemsType"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<DataGrid
Grid.Column="0"
Margin="0,0,0,5"
SelectionMode="Single"
SelectedItem="{Binding Model.SelectedMockItem, UpdateSourceTrigger=LostFocus}"
Name="ModelItemDataGrid"
MaxHeight="350"
VerticalScrollBarVisibility="Auto"
ItemsSource="{Binding Model.MockObject.MockItemsCollection}"
Height="Auto"
HorizontalGridLinesBrush="#CBCBCB"
VerticalGridLinesBrush="#CBCBCB"
AutoGenerateColumns="False"
IsReadOnly="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="Auto" />
<DataGridComboBoxColumn Width="120" ItemsSource="{Binding Source={StaticResource GetEnumValues}}" SelectedValueBinding="{Binding ValidItem}" />
<DataGridTemplateColumn x:Name="SelectedItemColumn" Header="Valid Item Type" Width="Auto" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox IsReadOnly="True" Text="{Binding Path=ValidItem}" d:DataContext="{d:DesignData MockItem}" >
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" >
<Setter Property="Background" >
<Setter.Value>
<SolidColorBrush Color="{Binding Path=ValidItem, Converter= {StaticResource MockItemValidItemToBackgroundColourConverter1}}" d:DataContext="{d:DesignData MockItem}" />
</Setter.Value>
</Setter>
</Style>
</TextBox.Style>
</TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
【问题讨论】:
-
为什么不使用可编辑的组合框?然后你可以像你一样使用 DataGridTemplateColumn 。但也有CellEditingTemplate以及CellTemplate,并在DataGridTemplateColumn.CellEditingTemplate中放了一个combobox。
-
感谢您的回复,有机会我会试一试,看看是否可以使用它