RowDetailsTemplate 中的组合框在选定列之前全部更新

Combobox in RowDetailTemplate update all before selected colums

我在 Datagrid 的 RowdetailsTemplate 中有一个组合框。如果我切换列,然后使用之前选择的值自动更改 Datagridcolumn 中的值。 Datagrid 列中的值只有在组合框中的值发生变化时才会发生变化

public class BMFill
{
    public BMFill()
    {
         colCBArt.Add(new CBArt { Name = "test" , Nr = 0 });
        colCBArt.Add(new CBArt { Name = "hallo", Nr = 1 });
        colCBArt.Add(new CBArt { Name = "welt", Nr = 2 });
        colCBArt.Add(new CBArt { Name = "blubb", Nr = 3 });
        colCBArt.Add(new CBArt { Name = "lalalala", Nr = 4 });

    }
    List<CBArt> colCBArt = new List<CBArt>();
    CollectionViewSource cvsCBArt = null;


    public ICollectionView ViewCBArt
    {
        get
        {
            if (cvsCBArt == null) cvsCBArt = new CollectionViewSource() { Source = colCBArt };
            return cvsCBArt.View;
        }
    }


    public class CBArt
    {
        public string Name { get; set; }
        public int Nr { get; set; }
    }
}

<Window.Resources>
    <local:BMFill x:Key="vm"/>
</Window.Resources>
<DataGrid x:Name="dg">
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <ComboBox Margin="10,10,10,10" Grid.Column="1" Grid.Row="1"
                                  SelectedValuePath="Nr"
                                  SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}"
                                  DisplayMemberPath="Name" 
                                  ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}"
                                  />
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>

我希望能理解我的问题并能帮上忙 =)

您可以尝试为 DropDownOpened 和 DropDownClosed 事件添加事件处理程序,在打开下拉菜单时引发一个标志,并检查在更改 Datagrid 列中的值时是否未引发该标志。

XAML:

        <ComboBox Margin="10,10,10,10" Grid.Column="1" Grid.Row="1"
                              SelectedValuePath="Nr"
                              SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}"
                              DisplayMemberPath="Name" 
                              ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}"
                              DropDownOpened="OnDropDownOpened" DropDownClosed="OnDropDownClosed"
                              />

C#:

    private bool _comboxBoxIsOpened = false;
    private void OnDropDownOpened(object sender, EventArgs e)
    {
        _comboxBoxIsOpened = true;
    }

    private void OnDropDownClosed(object sender, EventArgs e)
    {
        _comboxBoxIsOpened = false;
    }
SelectedValuePath="Nr"
                                  SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}"
                                  DisplayMemberPath="Name" 
                                  ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}"
                                  IsSynchronizedWithCurrentItem="False"

这个解决方案是我做的