2009-10-27 4 views
1

이 WPF에서는 무서워서 나와 함께 있습니다.WPF 용 Xceed DataGrid에서 행 선택을 검색하는 방법

WPF 용 Xceed DataGrid를 사용하고 있는데 누군가가 행을 선택하면 알 필요가 있지만 어떻게해야하는지 알 수 없습니다. 이 기능을 사용하려면 일부 XAML을 추가해야한다고 확신하지만, 내가 무엇을해야 하는지를 알 수는 없습니다.

답변

1

실제로 ICommand를 통해 선택 알림을 수행해야한다는 전제 조건을 제외하고는 똑같은 문제로 조금 어려움을 겪고 있습니다. 그러나이 필요가 없으면 SelectionChanged 이벤트 처리기를 연결할 수 있습니다. 그것은 꽤 초등학교 물건,하지만 난 그냥 경우에 코드를 포함합니다 :

XAML :

<Grid> 
    <DataGrid:DataGridControl x:Name="gridControl" SelectionChanged="gridControl_SelectionChanged"> 
     <!-- Content --> 
    </DataGrid:DataGridControl> 
</Grid> 

코드 숨김 말했다 모두, 내가 매우 관심

private void gridControl_SelectionChanged(object sender, Xceed.Wpf.DataGrid.DataGridSelectionChangedEventArgs e) 
     { 
     var selectedIndex = gridControl.SelectedIndex; // int index 
     var selectedItem = gridControl.SelectedItem; // instance of bound object 
     var selectedItems = gridControl.SelectedItems; // IList of bound objects 
     } 

ICommand를 사용하여 Xceed DataGrid에서 선택한 행을 가져 오는 우아한 솔루션이 있는지 들어보십시오 (제 경우에는 익명 형식을 사용하여 차이를 만들 수 있습니다) ...

+0

내 Xceed 그리드에이 이벤트가 없으므로 실제로 불가능합니다. 전문 버전이 있습니까? –

+0

아, 네, 그렇습니다 ... 이벤트 처리자를 제한한다는 것을 깨닫지 못했습니다. 나에게 이상하게 보입니다. – egoodberry

0

그래서 내가 여기 왔어. p with

System.ComponentModel.DependencyPropertyDescriptor gridItemsSourceDescriptor = System.ComponentModel.DependencyPropertyDescriptor.FromProperty(DataGridControl.SelectedItemProperty, typeof(DataGridControl)); 
    gridItemsSourceDescriptor.AddValueChanged(dgBaxRuns, HandleSelectionChanged); 
+0

이러한 설명자를 사용하면 메모리 누수가 발생하므로주의해야합니다. http://support.microsoft.com/kb/938416 –

3

MVVM 방식을 사용하므로 데이터 바인딩을 선호합니다. 모눈에 대한 내 ViewModel 개체의 SelectedItem 속성을 SelectedItem 속성에 바인딩합니다.

<xcdg:DataGridControl x:Name="grid" SelectedItem="{Binding SelectedItem}"> 
</xcdg:DataGridControl> 

그런 다음 속성 설정자는 SelectedItemChanged() 메서드에서 변경시 필요한 것을 수행 할 수 있습니다.

private IMyItem _selectedItem; 
public IMyItem SelectedItem 
{ 
    get { return _selectedItem; } 
    set { 
      _selectedItem = value; 
      OnPropertyChanged("SelectedItem"); 
      SelectedItemChanged(); 
     } 
} 
1

간단한 코드를 작성할 필요가 없습니다. 지루할 수 있지만, 여기에 몇 가지 코드가 있습니다. 이 도움이되기를 바랍니다.

<Style TargetType="xcdg:DataRow"> 
    <EventSetter Handler="dr_PreviewMouseDown" Event="PreviewMouseDown" /> 
</Style> 

void dr_PreviewMouseDown(object sender, MouseButtonEventArgs e) 
{ 
    DataRow dr = sender as DataRow; 

    Debug.WriteLine(sender); 
} 
0

내가 가장 쉽게 만들었습니다.

<xctk:MaterialButton Margin="5,0,5,0" Grid.Column="3" Content="Szűrt sorok kijelölése" Command="{Binding SelectFilteredRowsCommand}" CommandParameter="{Binding ElementName=MyDataGrid}" /> 

그래서 내 데이터 매개 변수를 내 viewmodel에 보내야합니다.

public RelayCommand<object> SelectFilteredRowsCommand { get; set; } 

SelectFilteredRowsCommand = new RelayCommand<object>((o) => 
      { 
       var datagrid = o as DataGridControl; 
       if (datagrid != null) 
       { 
        var datagriditems = datagrid.Items.Cast<SelectableProduct>(); 
        foreach (SelectableProduct selectableProduct in datagriditems) 
        { 
         selectableProduct.IsSelect = true; 
        } 
       } 
      }); 

그리고 다시 데이터 그리드 항목 유형으로 변환하십시오.

관련 문제