【问题标题】:Adding a Combobox to a DataGrid in Silverlight在 Silverlight 中将组合框添加到 DataGrid
【发布时间】:2011-02-24 01:43:49
【问题描述】:

我可以使用以下 xmal 将 Combobox 添加到 DataGrid:

 <local:DataGridTemplateColumn Header="SomeHeader" Width="106" HeaderStyle="{StaticResource headerAlignRightStyle}" CellStyle="{StaticResource cellAlignRightStyle}">
                    <local:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding SomeProp}" Margin="4"/>
                        </DataTemplate>
                    </local:DataGridTemplateColumn.CellTemplate>
                    <local:DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <ComboBox 
                              x:Name="SomeCombo"
                              SelectionChanged="SomeCombo_SelectionChanged"
                              ItemsSource="{Binding SomeList}"
                              DisplayMemberPath="Name" 
                              />
                        </DataTemplate>
                    </local:DataGridTemplateColumn.CellEditingTemplate>
                </local:DataGridTemplateColumn>

但是我想不通的是获取组合框行的明智方法是 势必。即在处理组合框 SelectionChanged 事件时,我无法知道是什么 组合框属于哪一行。特别是我不知道 DataGrid 数据源中有什么对象 组合框所指的。

任何帮助将不胜感激。

【问题讨论】:

    标签: silverlight datagrid combobox


    【解决方案1】:

    你可以

    A) 使用双向绑定将 ComboBox 的 SelectedItem 属性绑定到 ViewModel/数据模型中的属性,因此您首先不必担心 SelectionChanged

    B) 在您的 SelectionChanged 处理程序中使用 DataGridRow.GetRowContainingElement(element),即

    private void SomeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var comboBox = sender as ComboBox;
        if (comboBox == null)
            return;
        var row = DataGridRow.GetRowContainingElement(comboBox);
        // Do something with row...
    }
    

    干杯,亚历克斯

    【讨论】:

      【解决方案2】:

      如果您只是想获取该行所绑定的项目,则只需读取发送者的 DataContext:

      private void SomeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
      {
          var item = sender as FrameworkElement;
          if (item== null)
              return;
          var source = item.DataContext;
      }
      

      【讨论】:

        【解决方案3】:

        据我了解,当您单击组合框时,该行应该获得焦点。这也意味着数据网格知道所选项目。

        如果您正在寻找选定的对象,您应该可以通过datagridName.SelectedItem 访问它。这将返回选定的对象。

        请测试它并评论解决方案,因为我现在无法检查答案。

        【讨论】:

          猜你喜欢
          • 2011-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-13
          • 2013-11-17
          • 2023-03-24
          相关资源
          最近更新 更多