2

在我的 WPF C# 项目中,我有一个 Datagrid,如下所示:

<DataGrid x:Name="FixedPositionDataGrid" HorizontalAlignment="Left" Margin="33,229,0,0" VerticalAlignment="Top" Width="172" Height="128" AutoGenerateColumns="False" FontSize="10" CanUserAddRows="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="indice" Binding="{Binding index}" IsReadOnly="True"/>
            <DataGridTextColumn Header="%" Binding="{Binding percentage}" />                                    
            <DataGridComboBoxColumn x:Name="DataGridComboBoxColumnAlignment" Header="Allineamento barre" SelectedValueBinding="{Binding alignment}"/>
        </DataGrid.Columns>
    </DataGrid>

我需要一个事件来管理第二列和第三列中的值变化(即“%”和“Allineamento barre”)。不需要插入的值,我只需要在其中一个值发生更改时引发一个事件。我该如何执行?我需要定义事件方法的方法,我可以在其中定义一些要执行的操作。我已经阅读了如何在 wpf 数据网格的单元格中的值使用 MVVM 更改时引发事件?但我没有链接到数据网格的可观察集合。

编辑: Datagrid ItemSource 与以下对象链接:

public class FixedPosition
{
    [XmlAttribute]
    public int index { get; set; }

    public int percentage { get; set; }
    public HorizontalAlignment alignment { get; set; }        
}

如何修改它以获得预期的结果?

谢谢

4

1 回答 1

4

似乎从 WinForms 的角度来看这个问题。在 WPF 中,我们通常更喜欢操作数据对象而不是 UI 对象。你说你的物品没有一个ObservableCollection<T>,但我建议你使用一个。

如果您的数据没有数据类型类,那么我建议您创建一个。然后,您应该INotifyPropertyChanged在其中实现接口。

完成此操作并将您的集合属性设置ItemsSource为您的DataGrid后,您需要做的就是将INotifyPropertyChanged处理程序附加到您选择的数据类型:

在视图模型中:

public ObservableCollection<YourDataType> Items
{
    get { return items; }
    set { items = value; NotifyPropertyChanged("Items"); }
}

public YourDataType SelectedItem
{
    get { return selectedItem; }
    set { selectedItem = value; NotifyPropertyChanged("SelectedItem"); }
}

在视图模型构造函数中:

SelectedItem.PropertyChanged += SelectedItem_PropertyChanged;

在视图模型中:

private void SelectedItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    // this will be called when any property value of the SelectedItem object changes
    if (e.PropertyName == "YourPropertyName") DoSomethingHere();
    else if (e.PropertyName == "OtherPropertyName") DoSomethingElse();
}

在用户界面中:

<DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ... />
于 2013-09-10T14:57:40.587 回答