【发布时间】:2021-12-16 21:00:16
【问题描述】:
我有什么:
我有一个DataGridTemplateColumn 和一个ComboBox:
<DataTemplate x:Key="ValuesCellTemplate">
<TextBlock Text="{Binding Path=SelectedValue, Mode=OneWay}" />
</DataTemplate>
<DataTemplate x:Key="ValuesCellEditingTemplate">
<ComboBox
Name="ValuesComboBox"
DisplayMemberPath="DisplayText"
ItemsSource="{Binding Path=Value, Mode=OneWay}"
SelectedValue="{Binding Path=SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="DisplayText" />
</DataTemplate>
我正在自动生成列,所以AutoGeneratingColumn 事件如下所示:
if (e.PropertyName == "First")
{
var templateColumn = new DataGridTemplateColumn
{
Header = e.PropertyName,
CellTemplate = (sender as FrameworkElement).FindResource("ValuesCellTemplate") as DataTemplate,
CellEditingTemplate = (sender as FrameworkElement).FindResource("ValuesCellEditingTemplate") as DataTemplate
};
e.Column = templateColumn;
}
当Values(即ObservableCollection)为null时,我希望单元格为只读,因此无法进入单元格编辑模式。
本栏内容有2个选项:
- 一个简单的整数 -
SelectedValue -
ObservableCollection<int>-Values
当Values 内部有值时,当双击单元格(或TextBlock)时(也就是说 - 进入 CellEditing 模式),应该出现 ComboBox,否则不会出现。基本上就是这样。
我尝试过的:
我试过这样做:
<DataTemplate x:Key="ValuesCellTemplate">
<TextBlock Text="{Binding Path=SelectedValue, Mode=OneWay}" />
</DataTemplate>
<DataTemplate x:Key="ValuesCellEditingTemplate">
<ComboBox
Name="ValuesComboBox"
DisplayMemberPath="DisplayText"
IsEnabled="{Binding HasItems, RelativeSource={RelativeSource Self}}"
ItemsSource="{Binding Path=Value, Mode=OneWay}"
SelectedValue="{Binding Path=SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="DisplayText" />
</DataTemplate>
但是当我双击它时,TextBox 变成了一个空的只读ComboBox(进入 CellEditing 模式)。我只想让它不采取任何行动(只读)(仅当 Values 是 null 时)。
这样做的正确方法是什么?
为了记录,我使用的是 MVVM 模式。
【问题讨论】:
-
基本上,单元格可以是值的组合框,也可以只是一个简单的文本块。当
Values内部有值(例如1、2、3)时,1 被预先选择,当您双击单元格时,会出现一个带有其他值的组合框,您可以选择。另一方面,Values可能为空,我只设置SelectedValue。我希望当Values为空时,双击单元格时,组合框不会出现。基本上单元格是只读的。不,我没有尝试使用转换器,因为我不知道如何在我的情况下应用它。我希望我解释清楚了。 -
这是一个需求列表,这不是提问的正确方式。请阅读“How do I ask a good question?”,如果你尽力听从那里的建议,你会得到很好的答案。
标签: c# wpf combobox readonly datagridtemplatecolumn