我正在寻求以下方面的一些帮助。我的视图模型包含以下内容:
这在视图中表示为3个单独的数据网格。
当前绑定我允许根据我在组作业视图中选择的组来更改当前组中的作业列表。
我正在寻求帮助的是将主要作业列表的行背景颜色绑定到根据作业是否在当前选定的作业组列表中进行更改。
因此,如果我更改当前的作业组,则该组中的所有作业都将突出显示。任何帮助将不胜感激。
答案 0 :(得分:2)
我通过将DataGrid
样式与MultiBinding
触发器和转换器相结合来解决此问题。
示例XAML代码:
<Window.Resources>
<this:RowConverter x:Key="RowConverter" />
</Window.Resources>
<Grid>
<DataGrid Name="dtGroups" HorizontalAlignment="Left" />
<DataGrid Name="dtJobs" HorizontalAlignment="Right">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource RowConverter}">
<Binding Path="SelectedItem.Id" ElementName="dtGroups" />
<Binding Path="GroupId" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Background" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
</Grid>
dtGroups
是由类型为
DataGrid
public class JobGroup
{
public int Id { get; set; }
public string Name { get; set; }
}
dtJobs
是由类型为
DataGrid
public class Job
{
public string Name { get; set; }
public int GroupId { get; set; }
}
接下来,我检查GroupId
类中的Job
是否与dtGroups
中的所选作业组相同。这发生在转换器中:
class RowConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values.Length != 2 || values[0] == null || values[1] == null) return false;
if (values[0].ToString() == values[1].ToString()) return true;
return false;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}