GridView不会向集合添加行

时间:2013-04-08 16:46:42

标签: wpf mvvm datagrid

我正在开发基于MVVM的WPF应用程序。 我需要使用2个ComboBox列创建DataGrid。

我创建了下一个网格:

 <DataGrid Grid.Column="1" Grid.Row="4" AutoGenerateColumns="False" Margin="0,8,20,8" CanUserAddRows="True" CanUserDeleteRows="True"  ItemsSource="{Binding MapsGrid}">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="Main Category" Width="*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox
                ItemsSource="{Binding DataContext.MainCategories, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                DisplayMemberPath="Category"
                                SelectedItem="{Binding DataContext.MainCategorySelectedItem, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTemplateColumn Header="Sub Category" Width="*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox
                ItemsSource="{Binding DataContext.SubCategories, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                DisplayMemberPath="Category"
                                  SelectedItem="{Binding DataContext.SubCategorySelectedItem, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                                />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>

        </DataGrid>

网格看起来与我需要的完全一样,ComboBox控件包含数据,但我不知道为什么网格不会在我的集合中插入新行。

在我的视图模型中,我有下一个集合:

     private ObservableCollection<MapsDescGridModel> _mapsGrid;
            public ObservableCollection<MapsDescGridModel> MapsGrid
            {
                get { return _mapsGrid; }
                set
                {
                    if (Equals(value, _mapsGrid)) return;
                    _mapsGrid = value;
                    RaisePropertyChanged("MapsGrid");
                }
            }

我在构造函数中初始化它,我在数据网格中看到一个空白行,但我无法添加行(我正在尝试使用Enter键)

对象“MapsDescGridModel”包含2个实体(实体框架实体)

 public class MapsDescGridModel: NotificationObject
    {
        public MapsDescGridModel()
        {

        }

        public MapsDescGridModel(MainCategories mainCat, SubCategories subcat)
        {
            MainCategory = mainCat;
            SubCatergory = subcat;
        }

        private MainCategories _mainCategory;
        public MainCategories MainCategory
        {
            get { return _mainCategory; }
            set
            {
                if (Equals(value, _mainCategory)) return;
                _mainCategory = value;
                RaisePropertyChanged("MainCategory");
            }
        }


        private SubCategories _subCatergory;
        public SubCategories SubCatergory
        {
            get { return _subCatergory; }
            set
            {
                if (Equals(value, _subCatergory)) return;
                _subCatergory = value;
                RaisePropertyChanged("SubCatergory");
            }
        }

    }
}

我尝试按代码添加列,但我只能看到一行(其余的都是此行的副本)。 All my rows are copy of one row blank row at start

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

DataGridColumns不会添加到可视化树中。这就是为什么使用vt的绑定(例如ElementName,FindAncestor绑定)在那里不起作用的原因。 此问题类似于this一个。

Btw。:如果有很多行但只有一个DataContext,那么将每行的SelectedItem绑定到主DataContext是有意义的吗?您应该将每行的SelectedItem绑定到MapsDescGridModel类中的属性。