私の「アプリケーション」には、ソースとして DataTable を持つ DataGrid があります。DataTable には、次のようなオブジェクトが取り込まれます。
public class DataWrapper : INotifyPropertyChanged
{
public String Value { get; set {...} } // Changes fire PropertyChangeEvent
public bool IsMinimized { get; set {...} } // Changes fire PropertyChangeEvent
// Other code to implement INotifyPropertyChanged
}
ここでの一般的な考え方は、プロパティが「完全に」最小化された形式であるかどうかのいずれかであり、他の場所に設定されているプロパティValue
を見て、それがそうであるかどうかを確認できるということです。IsMinimized
ユーザーが DataGrid 内のセルを変更するとValue
、値が最小化されているかどうかを判断するチェックが実行され、IsMinimized
プロパティが設定されて、PropertyChanged
イベントが発生します。IsMinimized
各セルのスタイリングで、 is の場合は黄色でセルの輪郭を描き、それ以外の場合は輪郭を持たないようにしたいと思いFalse
ます。
最初の黄色のアウトラインを発生させることができましたが、Value
プロパティが変更されたときにバインディングを更新できません。私はこれをDataRowView
バインディング内で扱っているという事実に起因すると考えています。参考までに、セル スタイルのスニペットを次に示します。
<Style TargetType="{x:Type DataGridCell}" x:Key="GridCellStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Center" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource CellIsMinimizedConverter}}" Value="False" />
<Setter Property="BorderBrush" Value="Yellow" />
<Setter Property="BorderThickness" Value="1" />
</DataTrigger>
</Style.Triggers>
</Style>
に基づいて現在の列のプロパティをプルするためにコンバーターCellIsMinimizedConverter
が使用されていますが、これをトリガーするためにプロパティを変更する方法がわかりません。IsMinimized
DataRowView
IsMinimized
注: ユーザーが最小化されていない値を入力しても問題ないため、検証ルールを使用できません。