2017-12-25 28 views
0

목록보기 항목 객체의 데이터 필드를 기반으로 목록보기 항목 내부에 직사각형 스타일을 지정하려고합니다.WPF ListView Object DataTrigger

부울을 반환하려면 daydata.workload에서 정수를 IValueConverter를 사용하는 부울로 변환합니다.

예외가 없지만 사각형은 DataTrigger의 영향을받지 않습니다. 다른 스타일 규칙은 잘 작동합니다.

<Window.Resources> 
    <cv:numConverter x:Key="capacityConverter" /> 
<Window.Resources> 

-

<ListView Name="weekView" ItemsSource="{Binding dayList}" ItemTemplate="{StaticResource DefaultTemplate}" > 
      <ListView.Resources> 
       <Style TargetType="Rectangle" x:Key="capacityBG"> 

        <Setter Property="Stroke" Value="#FFE2E2E2" /> 
        <Setter Property="Width" Value="180" /> 
        <Setter Property="Height" Value="10" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=dayList.workload, Converter={StaticResource capacityConverter}, ConverterParameter=12}"> 
          <DataTrigger.Value>true</DataTrigger.Value> 
          <Setter Property="Fill" Value="Red"/> 
         </DataTrigger> 

        </Style.Triggers> 
       </Style> 
      </ListView.Resources> 
      <ListView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal"></StackPanel> 
       </ItemsPanelTemplate> 
      </ListView.ItemsPanel> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="{x:Type ListViewItem}"> 
        <Setter Property="Background" Value="Transparent" /> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type ListViewItem}"> 
           <ContentPresenter /> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListView.ItemContainerStyle> 
     </ListView> 

-

<Rectangle Style="{DynamicResource capacityBG}" VerticalAlignment="Top" Grid.Row="0" /> 

-

public class numConverter : IValueConverter 
{ 

    object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ((int)value) > val; 
    } 

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    public int val { get; set; } 
} 

-

public class dayData 
{ 
    public DateTime date { get; set; } 
    public int workload { get; set; } 

    public List<job> jobs { get; set; } 
} 
+0

귀하의 컨버터 클래스는 아무것도 – Rise

+0

오 일을하지, 잘 .. 나는 비주얼 스튜디오 보정 때문에 일어난 것 같아요. 소스를 편집했지만 여전히 작동하지 않습니다. – ManuKILLED

+0

@ManuKILLED 변환기에서 변환기 매개 변수를 사용하지 않습니다. 기본값으로 0 인'val' 속성을 사용합니다. – Mitya

답변

1

여기에서 문제는 변환기 매개 변수에 입력 된 값과 데이터 트리거 값이 문자열로 처리된다는 것입니다.

xmlns:sys="clr-namespace:System;assembly=mscorlib"

<Style.Triggers> 
      <DataTrigger> 
       <DataTrigger.Binding> 
        <Binding Path="WorkLoad" Converter="{StaticResource capacityConverter}"> 
         <Binding.ConverterParameter> 
          <sys:Int32>12</sys:Int32> 
         </Binding.ConverterParameter> 
        </Binding> 
       </DataTrigger.Binding> 
       <DataTrigger.Value> 
        <sys:Boolean>true</sys:Boolean> 
       </DataTrigger.Value> 
       <Setter Property="Fill" Value="Red"/> 
      </DataTrigger> 
    </Style.Triggers> 

그런 다음 당신은 비교를 위해 int로 변환 매개 변수를 캐스팅 할 수 있습니다 아래와 같이 이러한 값의 각각의 유형을 지정해야합니다.

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (int)value > (int)parameter; 
    } 
+0

완벽하게 작동합니다! – ManuKILLED