2017-04-25 52 views
0

我有一个DataGrid中RowdetailsTemplate的组合框。如果我切换列,然后自动更改Datagrid列中的值与之前选定的值。 如果ComboBox中值被改变组合框所有之前选择colums

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> 

我希望能理解我的问题,我可以帮助DataGrid列的值应该只改变=)

回答

0
SelectedValuePath="Nr" 
            SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}" 
            DisplayMemberPath="Name" 
            ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}" 
            IsSynchronizedWithCurrentItem="False" 

由我这个解决方案工作

0

你可以尝试添加事件处理程序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; 
    } 
+0

我的问题是,我需要更新的DataGrid列,如果在组合框中更改值 –

+0

@ToniSchönberger所以你可以保存之前的值打开,并检查它是否改变关闭(使用全局v良莠不齐)。如果是这样,更新Datagrid Colum – ShugiShugi