2017-04-25 78 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