【发布时间】:2017-07-25 10:22:16
【问题描述】:
我有一个简单的DataGrid,有两列
<DataGrid ItemsSource="{Binding Commands}" CanUserAddRows="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Value" Binding="{Binding Value}"/>
<DataGridTemplateColumn Header="Command">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding ComboItems}" SelectedValue="{Binding SelectedItem}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource ItemConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我的目标是禁用带有新行的ComboBox 的单元格。下图显示了我的DataGrid(绑定到两个项目的ObservableCollection)并标记了要禁用的列。
我已经尝试使用转换器禁用ComboBox
IsEnabled="{Binding Value, Converter={StaticResource DisableConverter}}"
但在我在第一列中输入值之前,转换器不会被调用。
希望有人可以帮助我!
【问题讨论】:
-
是的,我正在使用 MVVM,ItemConverter 只是用于检查何时调用转换器的测试,应在显示第 1 列的值时启用 ComboBox。
-
因为项目(ViewModel)尚未创建 - “新行”显示如果我向第一列添加值将创建的项目(所以我无法绑定到任何属性,因为后面没有对象)。这是默认的 DataGrid 行为,这基本上是我的问题。
-
否,因为“新行”是对象的默认行。该对象是在我在 DataGrid 中设置值时创建的。但我想禁用组合框,直到创建项目。 (图为两个item的一个ObservableCollection)
标签: c# wpf xaml datagrid converter