如何为wpf datagrid单元格赋值

时间:2010-10-25 20:00:33

标签: wpf datagrid

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

2 个答案:

答案 0 :(得分:0)

使用数据绑定,具有类似

的结构

库存: ObservableCollection ProductID 字符串描述

将ObservableCollection绑定到您的数据网格。在ViewModel句柄中,ProductID的属性已更改,然后根据需要更新说明。

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

答案 1 :(得分:0)

更好的方法是使用Binding to Properties,如

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
}