RowDetailsTemplate 中的组合框在选定列之前更新所有内容

Posted

技术标签:

【中文标题】RowDetailsTemplate 中的组合框在选定列之前更新所有内容【英文标题】:Combobox in RowDetailTemplate update all before selected colums 【发布时间】:2017-09-22 16:09:58 【问题描述】:

我在 Datagrid 的 RowdetailsTemplate 中有一个组合框。如果我切换列,则使用之前选择的值自动更改 Datagridcolumn 中的值。 只有当 Combobox 中的值发生更改时,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>

我希望能理解我的问题并可以帮助我=)

【问题讨论】:

【参考方案1】:
SelectedValuePath="Nr"
                                  SelectedValue="Binding NrDG,UpdateSourceTrigger=PropertyChanged"
                                  DisplayMemberPath="Name" 
                                  ItemsSource="Binding Source=StaticResource vm, Path=ViewCBArt"
                                  IsSynchronizedWithCurrentItem="False"

这个解决方案由我完成

【讨论】:

【参考方案2】:

您可以尝试为 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;
    

【讨论】:

我的问题是如果更改组合框中的值,我需要更新 Datagrid 列 @ToniSchönberger 这样您就可以将之前的值保存在 Opened 中,并检查它是否在 Closed 中更改(使用全局变量)。如果是这样,请更新 Datagrid 列

以上是关于RowDetailsTemplate 中的组合框在选定列之前更新所有内容的主要内容,如果未能解决你的问题,请参考以下文章

如何使用组合框在记录 ms 访问中搜索多个字段?

多值组合框在表单中创建多条记录

选择下拉组合框在 codeigniter 和 bootstrap 上返回 null

如何访问 DataGrid.RowDetailsTemplate 中的控件?

在可编辑网格中,如何使 Ext 组合框在选择项目时立即完成编辑模式?

为啥 Width="*" 不适用于位于 RowDetailsTemplate 中的 DataGrid 中的列