2010-03-24 4 views
0

MVVM 패턴을 사용하고 있습니다. 내 아이템을 묶었 고 DataGrid에서 행을 선택하면 편집 버튼 만 표시하려고합니다. WPF에서는 트리거를 사용하는 것이 가능하지만 Silverlight에서는 트리거가 없습니다. TemplatedParent 바인딩을 시도했지만이 경우 TemplatedParent가 무엇인지 확실하지 않습니다. Silverlight에는 RelativeSource 조상이 없습니다. 이 시점에서 나는 ... 뒤에 코드를 사용하여 솔루션을 보는거야Silverlight DataGrid에서 행을 선택하면 DataTemplate 내의 요소 가시성을 어떻게 변경합니까?

<data:DataGrid.Columns> 
    <data:DataGridTemplateColumn IsReadOnly="True" Header="Name" Width="300"> 
     <data:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Grid> 
       <TextBlock x:Name="textBlock" Text="{Binding Name, Mode=OneWay}" VerticalAlignment="Center" Margin="4,4,0,4"/> 
       <Button Margin="1,1,4,1" HorizontalAlignment="Right" VerticalAlignment="Center" Padding="7,4" Content="Edit" /> 
      </Grid> 
     </DataTemplate> 
     </data:DataGridTemplateColumn.CellTemplate> 
    </data:DataGridTemplateColumn> 
</data:DataGrid.Columns> 

답변

1

당신이 실버에서이 작업을 수행 할 수있는 몇 가지 방법이 내가 생각하지 않지만 그 중 순수 될 수 있습니다 XAML 솔루션. 그런 다음 MVVM을 사용하여 DataGrid의 SelectedItem 속성에 바인딩하는 뷰 모델에서 속성을 만듭니다. DataGird의 개별 항목이 다른보기 모델 자체를있는 경우에 당신은 그들에게 "IsEditable"와 같은 속성을 부여하고 버튼의 가시성에 바인딩 할 수

  1. : 거기에서, 두 differnt 한 옵션이 있습니다. 부모 ViewModel의 SelectedItem이 변경되면 모든 하위보기 모델의 IsEditable 속성을 업데이트하십시오.
  2. 자식보기 모델이 없으면 편집 단추의로드 된 이벤트를 처리 할 수 ​​있습니다. 코드 뒤에서는 단추의 가시성을 뷰 모델의 selecteditem 속성에 바인딩 할뿐만 아니라 원래 바인딩 된 항목을 변환기 매개 변수로 사용하는 바인딩 변환기를 설정합니다. 변환기, 당신은 ... 단지 실버 라이트 바인딩 RelativeSource FindAncestor이 있다면 선택된 항목이 원래 각인 아이템
+0

옵션 1과 비슷한 것으로갔습니다. 항목의 PagedCollectionView가있는 항목 뷰모 델에 IsSelected 속성을 추가했습니다. SelectionChanged 이벤트를 사용하여 e.RemovedItems를 반복하고 선택한 플래그를 지 웠습니다. e.AddedItems와 동일합니다. 내 기본보기 모델에 SelectedItem을 추가 할 수 있습니다. 누구든지 그 경로를 간다면 가장 쉬운 방법은 이전 항목에 SelectedItem의 setter에서 깃발을 지우고 새 SelectedItem에 플래그를 설정하는 것입니다 생각합니다. – miketrash

0

동일한 경우 확인할 수 있습니다

하나 나는 것이 좋습니다 수 해키 아이디어 종류-의 편집 컨트롤을 DataGrid 자체의 RowDetailsTemplate에 넣고 RowDetailsVisibilityMode를 VisibleWhenSelected로 설정하십시오.

룩앤필 이후가 아니지만 특정 유스 케이스를 "해결"할 수 있습니다.

그렇지 않다면 MVVM에 위배됩니다 (신중하게). 일반적으로 DataGrid는 자식 자식 괄호 경우입니다. 그들은 거의 모두 일부 코드 숨김이 필요합니다.

+0

나는 RowDetails를 사용하는 것을 고려했다. 그러나 당신은 옳았다. 내가 본 일이 아닌가. 그래도 좋은 제안. – miketrash

관련 문제