C# 如何根据rows对象是否是viewModel上可用的另一个集合的一部分来更改GridView行背景

C# 如何根据rows对象是否是viewModel上可用的另一个集合的一部分来更改GridView行背景,c#,wpf,gridview,mvvm,C#,Wpf,Gridview,Mvvm,我的基本gridView中填充了列。但是,如果在视图模型上声明的另一个集合中找到对象,而不是网格视图的项资源,我想更改行的背景 有什么建议我可以做到这一点吗 我已经查看了IValueConverter,但在这种情况下,我需要从转换器访问viewModel集合或数据库,我认为这不是一件好事 我使用的是.NET4.5,WPF 您可以使用IMultiValueConverter并绑定到对象本身和其他集合,例如: <ListView x:Name="lv"> <ListView

我的基本
gridView
中填充了列。但是,如果在
视图模型
上声明的另一个集合中找到对象,而不是
网格视图
项资源
,我想更改行的背景

有什么建议我可以做到这一点吗

我已经查看了IValueConverter,但在这种情况下,我需要从转换器访问
viewModel
集合或数据库,我认为这不是一件好事

我使用的是.NET4.5,WPF


您可以使用IMultiValueConverter并绑定到对象本身和其他集合,例如:

<ListView x:Name="lv">
    <ListView.Resources>
        <local:TheConverter x:Key="TheConverter" />
    </ListView.Resources>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Style.Triggers>
                <DataTrigger Value="True">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource TheConverter}">
                            <Binding Path="." />
                            <Binding Path="DataContext.TheOtherCollectionProperty" RelativeSource="{RelativeSource AncestorType=ListView}" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="Background" Value="Red" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Name}" />
        </GridView>
    </ListView.View>
</ListView>


public类转换器:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性)
{
if(值==null | |值。长度<2)
返回false;
YourDataObject obj=值[0]作为YourDataObject;
System.Collections.IList collection=值[1]为System.Collections.IList;
返回集合!=null&&collection.Contains(obj);
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}

您可以使用IMultiValueConverter并绑定到对象本身和其他集合,例如:

<ListView x:Name="lv">
    <ListView.Resources>
        <local:TheConverter x:Key="TheConverter" />
    </ListView.Resources>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Style.Triggers>
                <DataTrigger Value="True">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource TheConverter}">
                            <Binding Path="." />
                            <Binding Path="DataContext.TheOtherCollectionProperty" RelativeSource="{RelativeSource AncestorType=ListView}" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="Background" Value="Red" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Name}" />
        </GridView>
    </ListView.View>
</ListView>


public类转换器:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性)
{
if(值==null | |值。长度<2)
返回false;
YourDataObject obj=值[0]作为YourDataObject;
System.Collections.IList collection=值[1]为System.Collections.IList;
返回集合!=null&&collection.Contains(obj);
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}

为什么不创建一个属性,告诉您当前记录存在于另一个集合中,然后您可以使用IValueConverter或使用data trigger来更改背景色。这是最简单的方法,但我在这个特定情况下正在寻找一些替代方法。好的,然后使用多值转换器并传递要比较的集合和值。检查集合中是否存在,然后在此基础上更改颜色。使用多值转换器并传递集合时,您需要使用相对源来查找其数据上下文设置为视图模型的父元素。为什么不创建一个属性,告知当前记录存在于另一个集合中,然后您可以使用IValueConverter或使用数据触发器来更改背景颜色。这将是最简单的方法,但是在这个特殊情况下,我正在寻找一些替代方法。好的,然后使用多值转换器并传递集合和值进行比较。检查集合中是否存在,然后在此基础上更改颜色。使用多值转换器并传递集合时,需要使用相对源来查找其数据上下文设置为视图模型的父元素。