ユーザーが積極的に要求するまで、機密情報を隠す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。それが唯一の方法なら、コードの中にいくつかのものを入れても構いません。
おかげ
SOLUTION
は受け入れ答えは私が必要なものの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
あなたはおそらくこれから移動しましたが、私はこれを見ていて、知りたいのは非常に興味があります。なぜ、複雑なトリガールートを取るのではなく、編集モードのテキストボックスに 'DataGridTemplateColumn.CellEditingTemplate'を使用するだけですか? – Maverik
[表示]をクリックすると、ユーザーがグリッド内で編集できるようにするだけではなく、別の表示(パスワードを読み取ったユーザーを監査します)が開きます。 – RAM