C# MVVM DataGrid组合框SelectedValue Bindfing

C# MVVM DataGrid组合框SelectedValue Bindfing,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我有2个datagrid,我希望在第一个datagrid上有一个包含第二个datagrid的集合的组合框 当我从组合框中选择一个值时,该值将放在第一个数据网格中 在我的例子中,当我从组合框中选择材质时,我希望CoefD列自动放置。 这是我的密码 当我保存文件并想打开所选材料时,我想留在那里 型号:TName(第一个数据网格) 型号:TMaterial(第二个数据网格) 视图模型: public class AddNameViewModel : Changed { pr

我有2个datagrid,我希望在第一个datagrid上有一个包含第二个datagrid的集合的组合框 当我从组合框中选择一个值时,该值将放在第一个数据网格中

在我的例子中,当我从组合框中选择材质时,我希望CoefD列自动放置。 这是我的密码

当我保存文件并想打开所选材料时,我想留在那里

型号:TName(第一个数据网格)

型号:TMaterial(第二个数据网格)

视图模型:

public  class AddNameViewModel : Changed
    {
        private TName tnm;
        
        private ObservableCollection<TName> _dimensionName;
        private ObservableCollection<TMaterial> _materials;
        public AddNameViewModel()
        {
            DimensionName = new ObservableCollection<TName>
            {
                new TName{ Name="All"},
            };

            

            Materials = new ObservableCollection<TMaterial>
            {
                new TMaterial{Material="Aluminium" , CoefD="23.1"},
                new TMaterial{ Material="Brass",CoefD="19"},
                new TMaterial{ Material="Carbon Steel",CoefD="10.8"},
                new TMaterial{ Material="Concrete",CoefD="12"},
                new TMaterial{ Material="Platinum",CoefD="9"},
                new TMaterial{ Material="Iron",CoefD="11.8"},
            };

            
        }
        
        public ObservableCollection<TMaterial> Materials
        {
            get { return _materials; }

            set
            {
                if (_materials != value)
                {
                    _materials = value;
                    RaisePropertyChanged("Materials");
                }
            }
        }

        public ObservableCollection<TName> DimensionName
        {
            get { return _dimensionName; }
            set
            {
                if (_dimensionName != value)
                {
                    _dimensionName = value;
                    RaisePropertyChanged("DimensionName");
                }
            }
        }
        
        private TName sdimensionName;
        private TMaterial smaterials;
        public TName SDimensionName
        {
            get { return sdimensionName; }
            set
            {
                if (sdimensionName != value)
                {
                    sdimensionName = value;
                    RaisePropertyChanged("SDimensionName");
                }
            }
        }

        public TMaterial SMaterials
        {
            get { return smaterials; }

            set
            {
                if (smaterials != value)
                {
                    smaterials = value;
                    RaisePropertyChanged("SMaterials");
                }
            }
        }
        
        
    }
公共类AddNameViewModel:已更改
{
私人TName tnm;
私有可观测集合_维度名称;
私人可观察收集材料;
公共AddNameViewModel()
{
DimensionName=新的ObservableCollection
{
新的TName{Name=“All”},
};
材料=新的可观察收集
{
新t材料{Material=“aluminal”,CoefD=“23.1”},
新t材料{Material=“Brass”,CoefD=“19”},
新t材料{Material=“碳钢”,CoefD=“10.8”},
新材料{Material=“Concrete”,CoefD=“12”},
新t材料{Material=“Platinum”,CoefD=“9”},
新t材料{Material=“Iron”,CoefD=“11.8”},
};
}
公开收集资料
{
获取{return\u materials;}
设置
{
如果(_materials!=值)
{
_材料=价值;
提高产权变更(“材料”);
}
}
}
公共可观测集合维度名称
{
获取{return\u dimensionName;}
设置
{
如果(_dimensionName!=值)
{
_维度名称=值;
RaisePropertyChanged(“维度名称”);
}
}
}
私有TName sdimensionName;
私人材料;
公共TName SDimensionName
{
获取{return sdimensionName;}
设置
{
if(sdimensionName!=值)
{
SDDimensionName=值;
RaisePropertyChanged(“SDDimensionName”);
}
}
}
公共材料
{
获取{return smaterials;}
设置
{
if(smaterials!=值)
{
材料=价值;
RaisePropertyChanged(“材料”);
}
}
}
}
查看XAML DG:

<Grid Name="GridC" Margin="0,0,0,-203" >
        <DataGrid CanUserAddRows="True"  CurrentCellChanged="NameDataGrid_CurrentCellChanged" AutoGenerateColumns="False" ItemsSource="{Binding DimensionName,NotifyOnSourceUpdated=True}" RowEditEnding="NameDataGrid_RowEditEnding" Name="NameDataGrid" HorizontalAlignment="Left"  VerticalAlignment="Top" Loaded="NameGrid_Load" Margin="0,25,0,0"  Height="auto" Width="auto" >
            <DataGrid.Columns >
                <DataGridTextColumn  Header="Name" Binding="{Binding Name , Mode=TwoWay}">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding Color}"/>
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
                <DataGridTemplateColumn Header="Color">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <xctk:ColorPicker  SelectedColorChanged="ColorPicker_SelectedColorChanged" Background="{Binding Color}" SelectedColor="{Binding Color,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                
                <DataGridTemplateColumn Header="Material">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox SelectionChanged="ComboBox_SelectionChanged"
                            Width="150"
                            IsEditable="True"
                            IsDropDownOpen="False"
                            ItemsSource="{Binding 
                                Path = DataContext.Materials, 
                                RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                            DisplayMemberPath="Material"
                                                                                     
                            SelectedItem="{Binding SMaterials}"
                            IsReadOnly="True"
                             >
                            </ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTextColumn  IsReadOnly="False" Header="Coef"  Binding="{Binding SMaterials.CoefD,NotifyOnSourceUpdated =True}"/>
                <DataGridTextColumn IsReadOnly="True" Header="Drawing Number" Binding="{Binding NameDraw , Mode=TwoWay}">
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="DataGridCell">
                            <Setter Property="ToolTip">
                                <Setter.Value>
                                    <Image RenderOptions.BitmapScalingMode="Fant" Width="350" Height="350" Source="{Binding DrawPath}"/>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>

                <DataGridTemplateColumn>

                    <DataGridTemplateColumn.CellTemplate>

                        <DataTemplate>

                            <Button Content="Add Drawing" Click="AddDrawing_Click_1"/>

                        </DataTemplate>

                    </DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn>
                <DataGridTemplateColumn>

                    <DataGridTemplateColumn.CellTemplate>

                        <DataTemplate>

                            <Button x:Name="delet" Click="Delete_Click_1">
                                <StackPanel>
                                    <Image Source="/Image/delete2.jpg" Width="20" Height="20"/>
                                </StackPanel>
                            </Button>

                        </DataTemplate>

                    </DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn>
            </DataGrid.Columns>

        </DataGrid>
</Grid>

首先,请理解这是我制作的示例代码,而不是您使用的代码。
整个源代码都在

模型-员工(第一个数据网格)
公共类员工
{
公共字符串名称{get;set;}
公共整数{get;set;}
公共部门部门{get;set;}
}
模型-部门(第二数据网格)
公共课部
{
公共字符串部门代码{get;set;}
公共字符串DepartmentName{get;set;}
}
将要绑定(部门)的模型作为
Employee
类中的变量。

视图模型
public类主视图模型:observeObject
{
私人可观察收集的员工;
公开收集雇员
{
获取{return\u employees;}
设置{u employees=value;OnPropertyChanged();}
}
私人收集部门;
公共收集部门
{
获取{return\u departments;}
设置{u departments=value;OnPropertyChanged();}
}
私有字符串\u部门名称;
公共字符串DepartmentName
{
获取{return\u departmentName;}
设置{u departmentName=value;OnPropertyChanged();}
}
公共主视图模型()
{
Employees=GetEmployees();
Departments=GetDepartments();
}
私有ObservableCollection GetEmployees()
{
ObservableCollection员工=新的ObservableCollection员工
{
新员工{Name=“James”,年龄=30},
新员工{Name=“Elena”,年龄=26},
新员工{Name=“Rookie”,年龄=38}
};
返回员工;
}
私有可观测集合GetDepartments()
{
可观察
public  class AddNameViewModel : Changed
    {
        private TName tnm;
        
        private ObservableCollection<TName> _dimensionName;
        private ObservableCollection<TMaterial> _materials;
        public AddNameViewModel()
        {
            DimensionName = new ObservableCollection<TName>
            {
                new TName{ Name="All"},
            };

            

            Materials = new ObservableCollection<TMaterial>
            {
                new TMaterial{Material="Aluminium" , CoefD="23.1"},
                new TMaterial{ Material="Brass",CoefD="19"},
                new TMaterial{ Material="Carbon Steel",CoefD="10.8"},
                new TMaterial{ Material="Concrete",CoefD="12"},
                new TMaterial{ Material="Platinum",CoefD="9"},
                new TMaterial{ Material="Iron",CoefD="11.8"},
            };

            
        }
        
        public ObservableCollection<TMaterial> Materials
        {
            get { return _materials; }

            set
            {
                if (_materials != value)
                {
                    _materials = value;
                    RaisePropertyChanged("Materials");
                }
            }
        }

        public ObservableCollection<TName> DimensionName
        {
            get { return _dimensionName; }
            set
            {
                if (_dimensionName != value)
                {
                    _dimensionName = value;
                    RaisePropertyChanged("DimensionName");
                }
            }
        }
        
        private TName sdimensionName;
        private TMaterial smaterials;
        public TName SDimensionName
        {
            get { return sdimensionName; }
            set
            {
                if (sdimensionName != value)
                {
                    sdimensionName = value;
                    RaisePropertyChanged("SDimensionName");
                }
            }
        }

        public TMaterial SMaterials
        {
            get { return smaterials; }

            set
            {
                if (smaterials != value)
                {
                    smaterials = value;
                    RaisePropertyChanged("SMaterials");
                }
            }
        }
        
        
    }
<Grid Name="GridC" Margin="0,0,0,-203" >
        <DataGrid CanUserAddRows="True"  CurrentCellChanged="NameDataGrid_CurrentCellChanged" AutoGenerateColumns="False" ItemsSource="{Binding DimensionName,NotifyOnSourceUpdated=True}" RowEditEnding="NameDataGrid_RowEditEnding" Name="NameDataGrid" HorizontalAlignment="Left"  VerticalAlignment="Top" Loaded="NameGrid_Load" Margin="0,25,0,0"  Height="auto" Width="auto" >
            <DataGrid.Columns >
                <DataGridTextColumn  Header="Name" Binding="{Binding Name , Mode=TwoWay}">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding Color}"/>
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
                <DataGridTemplateColumn Header="Color">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <xctk:ColorPicker  SelectedColorChanged="ColorPicker_SelectedColorChanged" Background="{Binding Color}" SelectedColor="{Binding Color,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                
                <DataGridTemplateColumn Header="Material">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox SelectionChanged="ComboBox_SelectionChanged"
                            Width="150"
                            IsEditable="True"
                            IsDropDownOpen="False"
                            ItemsSource="{Binding 
                                Path = DataContext.Materials, 
                                RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                            DisplayMemberPath="Material"
                                                                                     
                            SelectedItem="{Binding SMaterials}"
                            IsReadOnly="True"
                             >
                            </ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTextColumn  IsReadOnly="False" Header="Coef"  Binding="{Binding SMaterials.CoefD,NotifyOnSourceUpdated =True}"/>
                <DataGridTextColumn IsReadOnly="True" Header="Drawing Number" Binding="{Binding NameDraw , Mode=TwoWay}">
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="DataGridCell">
                            <Setter Property="ToolTip">
                                <Setter.Value>
                                    <Image RenderOptions.BitmapScalingMode="Fant" Width="350" Height="350" Source="{Binding DrawPath}"/>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>

                <DataGridTemplateColumn>

                    <DataGridTemplateColumn.CellTemplate>

                        <DataTemplate>

                            <Button Content="Add Drawing" Click="AddDrawing_Click_1"/>

                        </DataTemplate>

                    </DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn>
                <DataGridTemplateColumn>

                    <DataGridTemplateColumn.CellTemplate>

                        <DataTemplate>

                            <Button x:Name="delet" Click="Delete_Click_1">
                                <StackPanel>
                                    <Image Source="/Image/delete2.jpg" Width="20" Height="20"/>
                                </StackPanel>
                            </Button>

                        </DataTemplate>

                    </DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn>
            </DataGrid.Columns>

        </DataGrid>
</Grid>