C# MVVM DataGrid组合框SelectedValue Bindfing
我有2个datagrid,我希望在第一个datagrid上有一个包含第二个datagrid的集合的组合框 当我从组合框中选择一个值时,该值将放在第一个数据网格中 在我的例子中,当我从组合框中选择材质时,我希望CoefD列自动放置。 这是我的密码 当我保存文件并想打开所选材料时,我想留在那里 型号:TName(第一个数据网格) 型号:TMaterial(第二个数据网格) 视图模型: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
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>