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或使用数据触发器来更改背景颜色。这将是最简单的方法,但是在这个特殊情况下,我正在寻找一些替代方法。好的,然后使用多值转换器并传递集合和值进行比较。检查集合中是否存在,然后在此基础上更改颜色。使用多值转换器并传递集合时,需要使用相对源来查找其数据上下文设置为视图模型的父元素。