0

我正在开发基于 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");
            }
        }

    }
}

我试图通过代码添加列,但我只能看到一行(其余的都是这一行的副本)。 我所有的行都是一行的副本 开始时的空白行

可能是什么问题?

4

1 回答 1

0

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

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

于 2013-04-08T16:54:19.917 回答