DataGridセルを含む行が特定のルールを満たしている場合に、DataGridセルのフォアグラウンドプロパティを変更するコードを記述しました(たとえば、そのテキストの値は「Incomplete」である必要があります)。コードビハインドでLoadingRowイベントをキャッチし、そこにロジックを書き込むことで、この作業をかなり簡単にすることができますが、これはあまり洗練されたMVVM実装ではないように感じます。コードは次のとおりです。
// Sets the foreground color of th 5th cell to red if the text in the cell corresponds
// to a value specified in the ViewModel.
private void dgProfile_LoadingRow(object sender, DataGridRowEventArgs e)
{
this.dgProfile.SelectedIndex = e.Row.GetIndex();
DataGridColumn column = this.dgProfile.Columns[4];
FrameworkElement fe = column.GetCellContent(e.Row);
FrameworkElement result = GetParent(fe, typeof(DataGridCell));
if (result != null)
{
DataGridCell cell = (DataGridCell)result;
if (((TextBlock)cell.Content).Text == (this.DataContext as ProfileViewModel).strIncompleteActivityStatus) cell.Foreground = new SolidColorBrush(Colors.Red);
else cell.Foreground = new SolidColorBrush(Colors.Black);
}
}
private FrameworkElement GetParent(FrameworkElement child, Type targetType)
{
object parent = child.Parent;
if (parent != null)
{
if (parent.GetType() == targetType)
{
return (FrameworkElement)parent;
}
else
{
return GetParent((FrameworkElement)parent, targetType);
}
}
return null;
}
MVVM Lightツールキットを使用してこれを実装するためのより良い方法があるかどうか誰かに教えてもらえますか?おそらくRelayCommandといくつかの巧妙なデータバインディングを介して?
助けてくれてありがとう!