我有一个使用MVVV的WPF应用程序;我有一个对象中的项集合,ItemsCollection中项目的一个属性是枚举,我希望用户能够使用下拉组合框或文本字段编辑ItemsCollection中项目的属性。该集合显示在DataGrid中。我很难让组合框显示并允许用户以非常简单的方式(单击,键盘输入)与它和文本框进行交互。现在,只需点击两次即可进入单元格,以便能够输入' name'我想要一次点击就可以让用户编辑值的字段。
这也需要三个!点击以使用我在下面的方法展开组合框的内容。
我已尝试过多次在堆栈溢出时找到的方法,但这是我发现的第一个解决方案,它甚至可以使用enum来填充组合框并在我的属性枚举中调用set
是否有人能够帮助我找到一种方法,允许用户只需点击一下给定的行即可更新条目(即点击进入文本字段进行编辑或点击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>
答案 0 :(得分:0)
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="IsEditing" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
这对你有帮助,我和你有同样的问题。