我想知道你能根据相应ViewModel中的Property值来决定自定义样式选择器类中的样式吗??
或
有没有办法根据ViewModel中的属性来选择ItemContainerstyle??
是的,ItemsControl
为此提供了ItemContainerStyleSelector
。对于CCD_ 4选择CCD_ 3可能有两种不同的情况。
在这个例子中,我们有
public class ViewModel
{
public ObservableCollection<Student> Students { get; set; }
public bool IsGood { get; set; }
}
基于主ViewModel进行选择(这与
ItemsSource
不同)。使用Trigger
。<ItemsControl.Style> <Style TargetType="ItemsControl"> <Style.Triggers> <DataTrigger Binding="{Binding IsGood}" Value="True"> <Setter Property="ItemContainerStyle" Value="{DynamicResource Style1Key}"/> </DataTrigger> </Style.Triggers> </Style> </ItemsControl.Style>
基于
Student
的属性(例如名称)进行选择。我们必须在这里使用ItemsControl.ItemContainerStyleSelector
。public class MyStyleSelector : StyleSelector { public Style Style1 { get; set; } public Style Style2 { get; set; } public override Style SelectStyle(object item, DependencyObject container) { Student s = (Student)item; if(s.Name == "Gopi") return Style1; else return Style2; } }
XAML
<Window.Resources> <Style x:Key="Style1Key"> <Setter Property="Control.Opacity" Value="0.3"/> </Style> <Style x:Key="Style2Key"> <Setter Property="Control.Opacity" Value="0.7"/> </Style> </Window.Resources> <ItemsControl ItemsSource="{Binding Students}"> ... <ItemsControl.ItemContainerStyleSelector> <local:MyStyleSelector Style1="{StaticResource Style1Key}" Style2="{StaticResource Style2Key}"/> </ItemsControl.ItemContainerStyleSelector> ... </ItemsControl>