我遇到了问题,我想将对象集合绑定到ComboBox(数据网格中的单元格)。
我的网格中有ComboBox,但它是空的,没有数据(Collection不为空):
<sdk:DataGrid Name="CdnsDataGrid" AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" Height="200" RowHeight="40" Margin="0,20,30,20" RowEditEnded="LinesDataGrid_RowEditEnded">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Width="*" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Welcome Message">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="VoiceMessagesComboBox" SelectedIndex="3" Width="250" ItemsSource="{Binding VMCollection}" SelectionChanged="OnVMSelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid Width="200" Height="46">
<TextBlock HorizontalAlignment="Center" Text="{Binding Description}"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
Collection项目包含:ID,Path,Description:
我试图在网格中显示组合框项目的描述,并且&#34; save&#34;单击,获取项目的ID(按行)
任何想法,如何解决? 谢谢。
答案 0 :(得分:1)
由于您的ComboBox位于DataGrid中,因此它位于该DataGrid的上下文中。看起来您正在访问ViewModel上的集合,因此您需要指定源。
一种选择是在您的用户控件上将View Model指定为资源,并将其指定为ComboBox ItemSource的源。
xmlns:vm="clr-namespace:My.App.ViewModels"
<UserControl.Resources>
<vm:MyViewModel x:Key="myViewModel"/>
</UserControl.Resources>
<sdk:DataGrid Name="CdnsDataGrid" AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" Height="200" RowHeight="40" Margin="0,20,30,20" RowEditEnded="LinesDataGrid_RowEditEnded">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Width="*" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Welcome Message">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="VoiceMessagesComboBox" SelectedIndex="3" Width="250" ItemsSource="{Binding VMCollection, Source={StaticResource myViewModel}}" SelectionChanged="OnVMSelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid Width="200" Height="46">
<TextBlock HorizontalAlignment="Center" Text="{Binding Description}"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
如果您通过Code Behind设置DataContext,则此方法不起作用。在这种情况下,您需要进行元素绑定。
答案 1 :(得分:0)
ComboBox将当前集合项(&#39; row&#39;)作为数据上下文,但集合位于VM中。您可以为绑定指定相对源并将其指向父DataGrid(数据上下文为VM):
<ComboBox Name="VoiceMessagesComboBox" SelectedIndex="3" Width="250"
ItemsSource="{Binding DataContext.VMCollection, RelativeSource={RelativeSource FindAncestor, AncestorType=sdk:DataGrid}}"
SelectionChanged="OnVMSelectionChanged">
答案 2 :(得分:0)
谢谢,最后这就是我做到的,它的确有效:
<ComboBox Height="23" Name="cbxFuelType" SelectionChanged="cbxFuelType_SelectionChanged" ItemsSource="{StaticResource VMCollection}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid Width="200" Height="46">
<TextBlock HorizontalAlignment="Center" Text="{Binding Description,Mode=TwoWay}"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
现在,我需要按ID显示描述,当加载DataGrid时。 任何的想法?