이 WPF에서는 무서워서 나와 함께 있습니다.WPF 용 Xceed DataGrid에서 행 선택을 검색하는 방법
WPF 용 Xceed DataGrid를 사용하고 있는데 누군가가 행을 선택하면 알 필요가 있지만 어떻게해야하는지 알 수 없습니다. 이 기능을 사용하려면 일부 XAML을 추가해야한다고 확신하지만, 내가 무엇을해야 하는지를 알 수는 없습니다.
이 WPF에서는 무서워서 나와 함께 있습니다.WPF 용 Xceed DataGrid에서 행 선택을 검색하는 방법
WPF 용 Xceed DataGrid를 사용하고 있는데 누군가가 행을 선택하면 알 필요가 있지만 어떻게해야하는지 알 수 없습니다. 이 기능을 사용하려면 일부 XAML을 추가해야한다고 확신하지만, 내가 무엇을해야 하는지를 알 수는 없습니다.
실제로 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에서 선택한 행을 가져 오는 우아한 솔루션이 있는지 들어보십시오 (제 경우에는 익명 형식을 사용하여 차이를 만들 수 있습니다) ...
그래서 내가 여기 왔어. p with
System.ComponentModel.DependencyPropertyDescriptor gridItemsSourceDescriptor = System.ComponentModel.DependencyPropertyDescriptor.FromProperty(DataGridControl.SelectedItemProperty, typeof(DataGridControl));
gridItemsSourceDescriptor.AddValueChanged(dgBaxRuns, HandleSelectionChanged);
이러한 설명자를 사용하면 메모리 누수가 발생하므로주의해야합니다. http://support.microsoft.com/kb/938416 –
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();
}
}
간단한 코드를 작성할 필요가 없습니다. 지루할 수 있지만, 여기에 몇 가지 코드가 있습니다. 이 도움이되기를 바랍니다.
<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);
}
내가 가장 쉽게 만들었습니다.
<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;
}
}
});
그리고 다시 데이터 그리드 항목 유형으로 변환하십시오.
내 Xceed 그리드에이 이벤트가 없으므로 실제로 불가능합니다. 전문 버전이 있습니까? –
아, 네, 그렇습니다 ... 이벤트 처리자를 제한한다는 것을 깨닫지 못했습니다. 나에게 이상하게 보입니다. – egoodberry