사용자가 적극적으로 요청할 때까지 일부 중요한 정보를 숨기는 DataGrid를 표시해야합니다.DataGrid에 새 행을 추가하는 동안 DataTemplate을 변경하는 방법 (새 행에만 적용)
표시 버튼을 사용자가 클릭 그들이 액세스 감사 다른보기를 표시됩니다과 :
<DataGrid.Columns>
<DataGridTextColumn Header="User Name" Binding="{Binding UserName}" IsReadOnly="False" MinWidth="90"/>
<DataGridTemplateColumn Header="Password" IsReadOnly="False" MinWidth="90">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Show"
Command="{Binding Path=DataContext.ShowPassword, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridCheckBoxColumn Header="Owner Only" Binding="{Binding OwnerOnly}" IsReadOnly="{Binding IsOwner, Converter={StaticResource InverseBooleanConverter}}" MinWidth="90"/>
<DataGridCheckBoxColumn Header="Active" Binding="{Binding Active}" IsReadOnly="False" MinWidth="90"/>
<DataGridTextColumn Header="Created" Binding="{Binding Created, StringFormat=\{0:dd.MM.yyyy HH:mm\}}" IsReadOnly="True" MinWidth="90"/>
<DataGridTextColumn Header="Superseded" Binding="{Binding Superseded, StringFormat=\{0:dd.MM.yyyy HH:mm\}}" IsReadOnly="True" MinWidth="90"/>
이 생산하는 어떤 : 나는 이렇게 열을 구축했습니다 암호를 변경할 수 있습니다.
유일한 문제는 내가 새 행을 추가 할 수있게하려는 것입니다. 그렇게하면 열은 텍스트 필드가 아닌 버튼이기 때문에 비밀번호를 지정할 수 없습니다.
질문 : '새 행'에서 해당 버튼을 TextBox로 변경하는 방법이 있습니까?
환경 : 코드 숨김 파일에 MVVM이 없습니다. 그게 유일한 방법이면 코드 뒤에 물건을 넣는 것도 괜찮습니다.
감사
솔루션
허용 된 대답은 나에게 내가 필요로 무엇의 90 %를 준하지만 두 번째 데이터 트리거를 추가했다 ...
<ContentControl>
<ContentControl.Resources>
<Button x:Key="btn" Content="Show"
Command="{Binding Path=DataContext.ShowPassword, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"/>
</ContentControl.Resources>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Content" Value="{StaticResource btn}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Password}" Value="{x:Null}">
<Setter Property="Content">
<Setter.Value>
<TextBox />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding DataContext, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="{x:Static CollectionView.NewItemPlaceholder}">
<Setter Property="Content">
<Setter.Value>
<TextBox />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
해당 데이터 템플릿 내에 버튼과 텍스트 상자가있을 수 있습니다. 그때는 두 가지의 가시성을 바인딩 할 수 있습니다 : 오래된 항목, 텍스트 상자가 보이면 그 버튼은 새로운 항목이 보일 때 나타납니다 – Milan
당신은 아마 이것에서 계속 전진했을 것입니다. 그러나 저는 이것을 보았고 저는 궁금해서 알고 있습니다 : 왜 didn ' 길게 얽힌 트리거 경로를 취하는 대신 편집 모드 텍스트 상자에'DataGridTemplateColumn.CellEditingTemplate'을 사용하면됩니까? – Maverik
보기를 클릭하면 사용자가 그리드에서 편집하는 것을 허용하지 않는 다른보기 (암호를 읽은 사람을 감사하는 이유)가 열립니다. – RAM