【问题标题】:How to assign a value to wpf datagrid cell如何为wpf datagrid单元格赋值
【发布时间】:2010-10-25 20:00:32
【问题描述】:

我有一个包含 2 列(ProductID 和 Description)的 wpf 数据网格。 ProductID 列是一个组合框,Description 是一个文本框。在 ProductID 的 SelectionChanged 事件中,我想为 Description 列分配一个值。我需要知道如何将值分配给触发 SelectionChanged 事件的组合框行的描述文本框。有人可以提供示例代码吗?这看起来很简单,但我找不到答案。谢谢

【问题讨论】:

    标签: wpf datagrid


    【解决方案1】:

    更好的方法是使用绑定到属性,例如

    private ProductIdEnum m_productId;
    public ProductIdEnum ProductId
    {
        get
        {
            return m_productId;
        }
        set
        {
            m_productId = value;
            // Value changed...
        }
    }
    

    要为 ComboBox 的 SelectionChanged 事件添加 EventHandler,您可以这样做,但我不建议这样做。

    <DataGridComboBoxColumn Header="ProductID"
                            ...">
        <DataGridComboBoxColumn.EditingElementStyle>
            <Style TargetType="{x:Type ComboBox}">
                <EventSetter Event="SelectionChanged" Handler="ProductIdChanged" />
            </Style>
        </DataGridComboBoxColumn.EditingElementStyle>
    </DataGridComboBoxColumn>
    

    在后面的代码中

    public T GetVisualParent<T>(object childObject) where T : Visual
    {
        DependencyObject child = childObject as DependencyObject;
        while ((child != null) && !(child is T))
        {
            child = VisualTreeHelper.GetParent(child);
        }
        return child as T;
    }
    
    void ProductIdChanged(object sender, SelectionChangedEventArgs e)
    {
        ComboBox comboBox = sender as ComboBox;
        DataGridRow dataGridRow = GetVisualParent<DataGridRow>(comboBox);
        SomeClass myClass = dataGridRow.Item as SomeClass;
        // Set description
    }
    

    【讨论】:

    • 谢谢!这将起作用。如果我在 DataGrid 中有一个未绑定到 Class 对象的 TextBox 怎么办?它只是用来显示目的,我想显示一个值。
    【解决方案2】:

    使用数据绑定,具有类似的结构,

    库存: ObservableCollection 产品ID 字符串描述

    将 ObservableCollection 绑定到您的数据网格。在您的 ViewModel 中处理 ProductID 的属性已更改,然后根据需要更新描述。

    您应该阅读有关 MVVM 模式的信息,请参阅 http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多