У меня небольшая проблема. Любые предложения очень ценятся.
Проблема: Я получаю свою ценность в RowData.Row.ScannedQty
в этой пропе.и я отправляю его на этот WarehouseInventoryDefineValueConvertor
и проверяю, равно ли это значение нулю, плюс или минус, основываясь на том, что я добавил + или -, но проблема в том, чтобы установить видимость полигона, который я не могу использовать, так как Dpне связывается, как я могу достичь этого?
Решения, которые я рассмотрел:
1. Используя прокси TextBlock, сохраните значение и используйте его в DataTrigger
2. вызов моего конвертера на каждом полигоне (это вариант, которого я хочу избежать, поскольку вызов конвертера увеличивается в 4 раза)
<StackPanel>
<TextBlock Grid.Row="0" Name="TxtScannedQty" Text="{Binding RowData.Row.ScannedQty,Converter={UIConverter:WarehouseInventoryDefineValueConvertor}}" HorizontalAlignment="Right">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="{Binding ElementName=MinusPolygon,Path=Visibility}" Value="Collapsed"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=TxtScannedQty,Path=Text}" Value="Zero">
<Setter Property="Text" Value="{Binding RowData.Row.ScannedQty, StringFormat= {}{0}}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=TxtScannedQty,Path=Text}" Value="Plus">
<Setter Property="Text" Value="{Binding RowData.Row.ScannedQty, StringFormat= +{}{0}}"></Setter>
<Setter Property="{Binding ElementName=MinusPolygon,Path=Visibility}" Value="Visble"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=TxtScannedQty,Path=Text}" Value="Minus">
<Setter Property="Text" Value="{Binding RowData.Row.ScannedQty, StringFormat= -{}{0}}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<Grid>
<Polygon Name="PlusPolygon" Points="5,0 10,10, 0,10" Stroke="Green" Fill="Green" />
<Polygon Name="MinusPolygon" Points="0,0 5,10, 10,0" Stroke="Red" Fill="Red" />
<Line Name="Zero1" Stroke="Gray" X1="0" Y1="2" X2="10" Y2="2" SnapsToDevicePixels="True" RenderOptions.EdgeMode="Aliased" StrokeThickness="2" />
<Line Name="Zero2" Stroke="Gray" X1="0" Y1="4" X2="10" Y2="4" SnapsToDevicePixels="True" RenderOptions.EdgeMode="Aliased" StrokeThickness="2" />
</Grid>
</StackPanel>
на основе ответа
Я в итоге звоню конвертеру 3 раза, есть ли лучший способ сделать это?
<Style.Triggers>
<DataTrigger Binding="{Binding RowData.Row.ScannedQty,Converter={UIConverter:WarehouseInventoryDefineValueConvertor}Value="Zero">
<Setter Property="Template" Value="{StaticResource ZeroTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding RowData.Row.ScannedQty,Converter={UIConverter:WarehouseInventoryDefineValueConvertor}}" Value="Plus">
<Setter Property="Template" Value="{StaticResource PositiveTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding RowData.Row.ScannedQty,Converter={UIConverter:WarehouseInventoryDefineValueConvertor}}" Value="Minus">
<Setter Property="Template" Value="{StaticResource NegativeTemplate}" />
</DataTrigger>
</Style.Triggers>