2010-08-17 6 views
1

인사말,포스 데이터 그리드 WPF DataGridTemplateColumn에서 CellTemplate에 대한

을있는 ListView를 사용하여 내가있는 ListView와 데이터 그리드를 사용하여 CellEditingTemplate를 사용하여 CellTemplate 있습니다.

<DataTemplate x:Key="LimitsTemplate"> 
    <ListView ItemsSource="{Binding Limits}" IsEnabled="False"> 
     <ListView.ItemTemplate> 
      ... 
     </ListView.ItemTemplate> 
    </ListView> 
</DataTemplate> 
<DataTemplate x:Key="LimitsEditingTemplate"> 
     <toolkit:DataGrid ItemsSource="{Binding Limits}" ...> 
      ... 
     </toolkit:DataGrid> 
</DataTemplate> 

제가 직면 한 문제는 두 번 클릭하면 열을 편집 모드로 전환하는 것입니다. 이것은 다른 열의 기본 동작이며 일반적으로 DataGrid를 믿습니다. F2 키를 누르면 편집 모드가 시작되지만 마우스를 사용하여 두 번 클릭하면 편집 모드가 시작됩니다.

ListView.IsEnabled를 False로 설정하면 두 번 클릭해도 제대로 작동하지 않지만 목록보기가 비활성화 된 상태이며 스타일 해킹은 못생긴 kludge처럼 느껴집니다.

트릭을 수행하지 않은 single click editing을 시도했음을 유의하십시오.

도움을 주시면 감사하겠습니다.

<DataTemplate x:Key="LimitsTemplate"> 
    <ListView ItemsSource="{Binding Limits}" PreviewMouseDoubleClick="limitsListView_PreviewMouseDoubleClick"> 
    ... 

:

최대한 빨리 SO 요청으로 물론

답변

1

는 대답은 내가 single click editing trick 와이어에서 FindVisualParent 방법을 사용하는 경우 목록보기까지 더블 예상대로 모든 작업을 클릭 것으로 :) 구체화 그리고 코드 뒤에 :

static T FindVisualParent<T>(UIElement element) where T : UIElement 
{ 
    UIElement parent = element; 
    while (parent != null) 
    { 
     T correctlyTyped = parent as T; 
     if (correctlyTyped != null) 
     { 
      return correctlyTyped; 
     } 

     parent = System.Windows.Media.VisualTreeHelper.GetParent(parent) as UIElement; 
    } 
    return null; 
} 

void limitsListView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    DataGrid dataGrid = FindVisualParent<DataGrid>(sender as UIElement); 
    if (dataGrid != null) 
    { 
     dataGrid.BeginEdit(); 
    } 
} 
0

나는 내 DataGrid와 매우 비슷한 문제가있었습니다. 다음은 내 프로젝트에서 문제가 발생한 이유입니다. DataGrid의 ItemsSource에 IEnumerable을 구현하는 사용자 지정 목록이 할당되었습니다.

같은 인덱스의 다른 호출에 대해 다른 객체를 반환하도록이 목록을 구현했습니다. 예를 들어 전화를 걸면 "WPF"라는 이름을 가진 객체를 처음으로 반환 할 때 list [0]을 호출하는 것처럼 그것은 다시 [0]을 나열하여 "WPF"값을 보유하고있는 완전히 새로운 객체를 반환합니다.

그래서 바인딩 할 컬렉션 (제한)이 IEnumerable 및 IList 인터페이스를 구현 한 사용자 지정 컬렉션이면 구현을 확인하십시오. 내 경우에는 인덱스 연산자 인 IndexOf와 Contains였습니다.

My Blog

관련 문제