WPF DataGrid基础知识

时间:2011-06-03 13:42:54

标签: .net wpf mvvm datagrid binding

我使用DataGridColumn类型的编辑元素创建了自定义DGNumericColumnNumericUpDown)(取自扩展WPF工具包)

<k:DataGrid ItemsSource="{Binding Profiles}" 
            SelectedIndex="{Binding SelectedProfile}">
  <k:DataGrid.Columns>
    <k:DGNumericColumn Binding="{Binding Depth}"/>
    .
    .
    .

我想要的是(每个人都希望从datagrid :)),例如,更新ViewModel中的Depth属性,方式类似于NumericUpDown控件时的情况不是“内部”DataGrid,例如当控件的值发生变化时,不仅当单元格发生变化时(CellEditEnding事件)。我认为以下可能会奏效,但事实并非如此。

<k:DataGrid ItemsSource="{Binding Profiles}" 
            SelectedIndex="{Binding SelectedProfile}">
  <k:DataGrid.Columns>
    <k:DGNumericColumn>
      <k:DGNumericColumn.EditingElementStyle>
        <Style TargetType="j:NumericUpDown">
          <Setter Property="Value" Value="{Binding Depth}"/>
          <Setter Property="Maximum" Value="10.0"/>
        </Style>
      </k:DGNumericColumn.EditingElementStyle>          
    </k:DGNumericColumn>
    .
    .
    .

请记住,样式中的最大阈值有效,并且在Visual Studio的输出区域中未报告任何绑定问题。如何在细胞失去焦点时解决属性变化的问题?

1 个答案:

答案 0 :(得分:0)

好的,解决了。

<k:DataGrid ItemsSource="{Binding Profiles}" 
            SelectedIndex="{Binding SelectedProfile}">   
  <k:DataGrid.Columns>
    <k:DataGridTemplateColumn>
      <k:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding Depth}"/>
        </DataTemplate>
      </k:DataGridTemplateColumn.CellTemplate>
      <k:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
          <l:NumericUpDown Value="{Binding Depth}"/>
        </DataTemplate>
      </k:DataGridTemplateColumn.CellEditingTemplate>
    </k:DataGridTemplateColumn>
    .
    .
    .