写这个的时候,在网上搜索了很多都没办法达到自己预期的效果,现在自己亲自试验过后一个成功的案例分析一下
上代码:
前端代码:
<DataGrid DockPanel.Dock="Top"
ItemsSource="{Binding SettingDataList}"
AutoGenerateColumns="False"
CanUserSortColumns="False"
CanUserResizeColumns="False"
CanUserReorderColumns="False"
HeadersVisibility="Column"
CanUserResizeRows="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
ColumnWidth="*">
<DataGrid.Columns>
<DataGridTextColumn Header="区域" IsReadOnly="True" Width="50" Binding="{Binding Area}"></DataGridTextColumn>
<DataGridTemplateColumn Header="地面类型">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="ArchBGYDesignTool:SettingModel">
<ComboBox ItemsSource="{Binding FloorTypes}"
SelectedItem="{Binding SelectFloorType ,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
SelectedValuePath="Id"
SelectionChanged="ComboBox_SelectionChanged"
IsEditable="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="100" Header="高度偏移(mm)" Binding="{Binding HeightDeviation}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
ViewModel:
private List<SettingModel> settingDataList { get; set; } = new List<SettingModel>();
public List<SettingModel> SettingDataList {
get { return settingDataList; }
set
{
settingDataList = value;
RaisePropertyChanged(nameof(SettingDataList));
}
}
Model:
public class SettingModel : BindableBase
{
private string areaId { get; set; }
public string AreaId
{
get { return areaId; }
set
{
areaId = value;
RaisePropertyChanged(nameof(AreaId));
}
}
private string area { get; set; }
public string Area {
get { return area; }
set
{
area = value;
RaisePropertyChanged(nameof(Area));
}
}
private List<RoofType> floorTypes { get; set; }
public List<RoofType> FloorTypes
{
get { return floorTypes; }
set
{
floorTypes = value;
RaisePropertyChanged(nameof(FloorTypes));
}
}
private RoofType _selectFloorType { get; set; }
public RoofType SelectFloorType {
get { return _selectFloorType; }
set
{
_selectFloorType = value;
RaisePropertyChanged(nameof(SelectFloorType));
//HeightDeviation = value == null ? 0.0 : value.get_Parameter(BuiltInParameter.ROOF_LEVEL_OFFSET_PARAM).AsDouble();
}
}
private double _heightDeviation { get; set; } = 0.0;
/// <summary>
///
/// </summary>
public double HeightDeviation
{
get
{
return _heightDeviation;
}
set
{
_heightDeviation = value;
RaisePropertyChanged(nameof(HeightDeviation));
}
}
}
以前使用了:Prism ,MVVM框架