我有一个WPF MVVM应用程序中的类,我想以弹出窗体的形式显示并管理它的一些成员。WPF绑定到DataGridTemplateColumn中的组合框
public class Route
{
public string Name { get; set; }
public List<RouteSegment> MandatorySegments { get; set; }
}
public class RouteSegment
{
public decimal Id { get; set; }
public string Name { get; set; }
}
我只添加了一些成员字段,其余都不相关。
我想要做的是在数据网格的组合框中显示MandatorySegments
列表中的所有项目,以便我可以轻松地添加和删除新成员。
这是我的代码至今:
在我的ViewModel
public RouteTest SelectedRoute { get; set; }
public ObservableCollection<RouteSegment> AllRouteSegments { get; private set; }
public RouteSegment SelectedMandatorySegment { get; set; }
在我看来
<DataGrid Grid.RowSpan="2"
AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="5,6,0,5" Name="dgMandatorySegments" VerticalAlignment="Stretch" Width="306"
ItemsSource="{Binding SelectedRouteTest.MandatorySegments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" CanUserResizeRows="False" CanUserSortColumns="False" CanUserResizeColumns="False" CanUserReorderColumns="False"
CanUserAddRows="{StaticResource False}" SelectionMode="Single" SelectedItem="{Binding SelectedMandatorySegment, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Route Segment">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.AllRouteSegments, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
ItemTemplate="{StaticResource CboxItemTemplate}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我缺少的是什么在组合框的SelectedValue
或SelectedItem
在模板网格列中。现在,在网格中,我的行数与列表中的元素数量相同,并且组合框的ItemsSource
正确绑定,因为我可以从所有RouteSegment
元素中进行选择。但是对于数据网格中的所有行,初始值始终为空。 组合框的SelectedValue
应该绑定什么?
我希望所有行的行独立值。例如,组合框项目源包含100个项目,但是我的Route.MandatorySegments只有5个项目。因此,datagrid中的每一行都将包含一个组合框,其初始值分别为这5个项目中的每一个设置。 我会尝试你的实现,谢谢。 – Adrian 2012-04-09 14:15:06
使用'DataContext.SelectedMandatorySegment'不起作用。我是否需要以某种方式包装'DataContext.AllRouteSegments'的元素?每行如何知道如何绑定到Route.MandatorySegments中的每个元素? – Adrian 2012-04-09 15:43:48
你在ctor中将'SelectedMandatorySegment'分配一个默认值吗? 'SelectedMandatorySegment'还应实现['INotifyPropertyChanged'](http://msdn.microsoft.com/en-us/library/ms743695.aspx)以查看UI中的任何更新。 – SliverNinja 2012-04-09 18:49:06