【发布时间】:2015-07-19 15:21:19
【问题描述】:
如果验证失败,我想要将 DataGridRow 涂成红色。我尝试使用 ValueConverter 来实现,但我不知道如何从多个绑定源传递值。
我有绑定到对象集合的数据网格。然后有一个 DataGridTemplateColumn 里面有 ComboBox 和 Textbox(一次只能看到一个),并且 ComboBox 与绑定的集合绑定源无关。
见代码:
<DataGrid Grid.Row="4" Grid.Column="0" x:Name="DGR_Slots" Grid.ColumnSpan="5" Grid.RowSpan="3" ItemsSource="{Binding ElementName=WND_ItemCraftingWindow, Path=SelectedSchematic.Slots}" AutoGenerateColumns="False" ColumnWidth="*">
<DataGrid.Resources>
<classes:ValidationConverter x:Key="ValidationConverter" />
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="{Binding Converter={StaticResource ValidationConverter}}" />
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}" Visibility="Collapsed"/>
<DataGridTextColumn Header="Slot Type" Binding="{Binding SlotType}" />
<DataGridTextColumn Header="Mat Type" Binding="{Binding MaterialType}" />
<DataGridTextColumn Header="Count" Binding="{Binding MaterialCount}" />
<!--<DataGridComboBoxColumn Header="Material" />-->
<DataGridTemplateColumn Header="Material">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<ComboBox Visibility="Visible" MouseDoubleClick="MaterialCell_MouseDoubleClick" ItemsSource="{Binding ElementName=WND_ItemCraftingWindow, Path=Materials}" DisplayMemberPath="Name" SelectedValuePath="Name" SelectionChanged="MaterialComboBox_SelectionChanged"/>
<TextBox Visibility="Collapsed" MouseDoubleClick="MaterialCell_MouseDoubleClick" PreviewKeyUp="MaterialCell_TextBox_PreviewKeyUp" KeyUp="MaterialCell_TextBox_KeyUp" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
WND_ItemCraftingWindow 是拥有数据网格的 Window,Materials 是该窗口内的 ObservableCollection 属性。
我需要将 DataGrid.ItemsSource 集合中的对象(现在可以使用)和 Combobox 中的 SelectedItem 在同一行(我不知道该怎么做)传递到 ValidationConverter。
只能使用来自 DataGridRow 的对象和来自组合框的 SelectedItem 来执行行的验证。
我也愿意接受不同的解决方案,在此类验证后为行着色。
【问题讨论】:
-
您验证数据的方法是错误的。您应该利用 WPF 中包含的验证机制。查看this 博客文章了解更多信息。
-
好吧,我可以使用这些验证规则或 IDataErrorInfo,但我如何使用它们来获取所需的值?
-
如果您需要从 xaml 绑定发送多个值,请使用
IMultiValueConverter。
标签: wpf binding ivalueconverter