根据ViewModel中的特性值设置ItemContainerStyle Selector中的样式



我想知道你能根据相应ViewModel中的Property值来决定自定义样式选择器类中的样式吗??

有没有办法根据ViewModel中的属性来选择ItemContainerstyle??

是的,ItemsControl为此提供了ItemContainerStyleSelector。对于CCD_ 4选择CCD_ 3可能有两种不同的情况。

在这个例子中,我们有

public class ViewModel
{ 
   public ObservableCollection<Student> Students { get; set; } 
   public bool IsGood { get; set; }
}
  1. 基于主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>
    
  2. 基于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>
    

相关内容

  • 没有找到相关文章

最新更新