wpf mvvm 下DataGrid内容DataGridComboBoxColumn下拉框怎么绑定数据源?

~雄 2021-05-03 05:01:48
<DataGrid  IsReadOnly="False"  AutoGenerateColumns="False" Background="white"
CanUserResizeColumns="False" CanUserResizeRows="False" SelectionMode="Single"
CanUserReorderColumns="False" AlternationCount="2" RowHeaderWidth="0" CanUserAddRows="False" ItemsSource="{Binding StaffVos,Mode=TwoWay}" SelectedItem="{Binding SelectStaffEntity}" >
<!--设置列-->
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="选择" Binding="{Binding IsSelected}" x:Name="select" Width="1*"/>
<DataGridTextColumn Header="货品ID" Visibility="Collapsed" Binding="{Binding ProductInformationID}" Width="10" />
<DataGridTextColumn Header="货品编码" Binding="{Binding ProductCoding}" Width="1*"/>
<DataGridTextColumn Header="货品名称" Binding="{Binding ProductName}" Width="2*"/>
<DataGridTextColumn Header="批 次" Binding="{Binding Batch,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="1*"/>
<DataGridComboBoxColumn Header="质 量" Width="*" ItemsSource="{Binding QualityGauge}" DisplayMemberPath="{Binding QualityGaugeName}" SelectedValuePath="{Binding QualityGaugeID}"
TextBinding="{Binding QualityGauge}" SelectedValueBinding="{Binding QualityGauge}" />
<DataGridTextColumn Header="数量" Binding="{Binding Quantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="1*"/>
<DataGridTextColumn Header="备注" Binding="{Binding Remark,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="2*"/>
<DataGridTemplateColumn Header="单位" Width="1*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="models:MyModelDescription">
<ComboBox ItemsSource="{Binding UnitSheet}" DisplayMemberPath="UnitSheetName" SelectedValuePath="UnitSheetID" SelectedItem="{Binding UnitSheetID, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

这是xaml的DataGrid 我需要把质量这个列的下拉框绑定数据源;
<DataGridComboBoxColumn Header="质  量" Width="*"  ItemsSource="{Binding QualityGauge}"  DisplayMemberPath="{Binding QualityGaugeName}" SelectedValuePath="{Binding QualityGaugeID}" 
TextBinding="{Binding QualityGauge}" SelectedValueBinding="{Binding QualityGauge}" />

单位那里我用了ComboBox 绑定下拉项,但是两种我都试了一些方法,都绑定不上去。

 /// <summary>
/// 单位
/// </summary>
private List<D_UnitSheet> _UnitSheet;
public List<D_UnitSheet> UnitSheet
{
get { return _UnitSheet; }
set
{
if (_UnitSheet != value)
{
_UnitSheet = value;
RaisePropertyChanged(() => UnitSheet);
}
}
}

/// <summary>
/// 质量
/// </summary>
private List<D_QualityGauge> _QualityGauge;
public List<D_QualityGauge> QualityGauge
{
get { return _QualityGauge; }
set
{
if (_QualityGauge != value)
{
_QualityGauge = value;
RaisePropertyChanged(() => QualityGauge);
}
}
}

这里是和下拉框ItemsSource关联的那个。

//单位
private List<D_UnitSheet> DanWei()
{
List<D_UnitSheet> UnitSheet = (from tbUnitSheet in myModel.D_UnitSheet select tbUnitSheet).ToList();

return UnitSheet;
}

//质量
private List<D_QualityGauge> ZhiLiang()
{
List<D_QualityGauge> QualityGauge = (from tbQualityGauge in myModel.D_QualityGauge select tbQualityGauge).ToList();
return QualityGauge;
}


//绑定就是在需要的地方直接给下拉框的ItemsSource赋值查询出来的数据,
//页面上的下拉框就是这样绑定的但是表格里的不行。我也尝试了其他方法最终还是失败了。
////单位
UnitSheet = DanWei();

////质量
QualityGauge = ZhiLiang();



这里查询出数据库的数据作为下拉项。
就是绑定不上数据。我的目的就是在表格里绑定下拉框,下拉框的数据是从数据库查询出来的数据。
...全文
3163 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
~雄 2021-05-09
  • 打赏
  • 举报
回复
我这里是重新指定DataContext吗? 我也不太懂,大佬麻烦看一下,
//单位 这个就是从数据库查询出来的数据
        private List<D_UnitSheet> DanWei()
        {
            List<D_UnitSheet> UnitSheet = (from tbUnitSheet in myModel.D_UnitSheet select tbUnitSheet).ToList();
            
            return UnitSheet;
        }
 
        //质量  这个就是从数据库查询出来的数据
        private List<D_QualityGauge> ZhiLiang()
        {
            List<D_QualityGauge> QualityGauge = (from tbQualityGauge in myModel.D_QualityGauge select tbQualityGauge).ToList();
            return QualityGauge;
        }
 
 
//绑定就是在需要的地方直接给下拉框的ItemsSource赋值查询出来的数据,
//页面上的下拉框就是这样绑定的但是表格里的不行。我也尝试了其他方法最终还是失败了。
////单位 指定数据源
      UnitSheet = DanWei();
             
    ////质量
      QualityGauge = ZhiLiang();
还有一个疑问,就是如果要给表格下拉框指定数据源,我这个表格是一个Vo实体类接收的然后显示在页面上,所以我想问我的页面上表格绑定下拉框数据,我的Vo实体类里面是不是也要有接收下拉框数据的东西? 我的Vo实体类继承的表格内有两个副ID用于保存我选中的两个下拉框的ID,然后没有其他东西了。
~雄 2021-05-09
  • 打赏
  • 举报
回复
已解决谢谢!
谷棵 2022-09-23
  • 举报
回复
@~雄 怎么解决的,解决了能否分享出来
~雄 2022-09-26
  • 举报
回复
@谷棵 看我帖子有发
Eason0807 2021-05-03
  • 打赏
  • 举报
回复
你这里的DataGridComboBoxColumn的DataContext与DataGrid的DataContext是不同的,所以你需要在DataGridComboBoxColumn重新指定DataContext

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧