我有一个数据网格,它的一个单元格是一个组合框,如:
df1 <- structure(list(country = c("Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Costa Rica", "Costa Rica",
"Costa Rica", "Costa Rica"), ISO = c("AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "CRI", "CRI", "CRI", "CRI"), year = c(1980L, 1981L,
1982L, 1983L, 1984L, 1985L, 1980L, 1981L, 1982L, 1983L),
`tfp level` = c(0.796980202,
0.808527768, 0.790943801, 0.818122745, 0.827925146, 0.825170755,
1.082085967, 1.033975005, 0.934024811, 0.920588791)),
class = "data.frame", row.names = c(NA,
-10L))
正如您在每一行中看到的那样,在明细行中有一个组合框(使用按钮展开的行),每个组合框都绑定到一个属性:
<DataGrid x:Name="Applications" RowStyle="{StaticResource CollapsedRow}" AutoGenerateColumns="false" CanUserAddRows="false" ItemsSource="{Binding Applications}">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content='˅' FontSize="9" Name="ExpanderButton" Click="OnGroupChange" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="181" Header="Name" Binding="{Binding Name, Mode=OneWay}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=DataContext.Cabins,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"
SelectedValuePath="Id" IsSynchronizedWithCurrentItem="True"
SelectedValue="{Binding Path=DataContext.SelectedCabin,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
mah:TextBoxHelper.Watermark="{Binding Path=DataContext.CabinsWatermark, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"
Height="2" Width="300" Margin="10 5 10 10" HorizontalAlignment="Left">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource GuidConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
现在的问题是,当我在组合框中选择项目时,我得到的不是单个值而是几个(我想我选择了一个组合框中的所有值),以确保我用测试代码仔细检查了一下后面:
private Guid? selectedCabin;
public override Guid? SelectedCabin
{
get => selectedCabin;
set
{
selectedCabin = value;
if (value.HasValue)
{
Console.WriteLine(value);
}
OnPropertyChanged();
}
我要到这里,组合框项目列表和强制转换异常。这可能是导致此问题的根本原因,并且有一种方法可以将多个组合框值绑定到一个属性,所以我选择了一个它将覆盖另一个属性。
答案 0 :(得分:1)
似乎您正在将所有行详细信息SelectedValue
的{{1}}绑定到同一源属性。而且您无法将ComboBoxes
参数转换为sender
。尝试投射Guid?
的{{1}}属性:
SelecteedValue
如果您不想在视图中处理ComboBox
事件,则可以使用一个交互触发器来执行设置源属性的命令。有关更多信息,请参考this blog post。