Question

I am using a WPF Devexpress GridControl and I have a column that contains an image. I want to modify the Image using a DataTrigger. Here is the XAML:

      <dxg:GridColumn Header="{Binding Source={StaticResource MainWindowResources}, Path=Resource.Status}"
                                FieldName="SaveStatus"
                                MinWidth="60"
                                Width="60"
                                ReadOnly="True" 
                                >
                    <dxg:GridColumn.CellTemplate>
                        <DataTemplate>
                            <Image HorizontalAlignment="Center"
                                   VerticalAlignment="Center"
                                   Style="{StaticResource ImageStatusStyle}">
                            </Image>
                        </DataTemplate>
                    </dxg:GridColumn.CellTemplate>

                </dxg:GridColumn>

and the style:

<Style TargetType="{x:Type Image}" x:Key="ImageStatusStyle">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=Data.SaveStatus, UpdateSourceTrigger=
PropertyChanged}" Value="{x:Static enums:SaveState.DoneSuccesfuly}">
            <Setter Property="Source" Value="..\Icons\StatusOk.png" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=Data.SaveStatus, UpdateSourceTrigger=
PropertyChanged}" Value="{x:Static enums:SaveState.DoneUnsuccesfuly}">
            <Setter Property="Source" Value="..\Icons\StatusError.png" />
        </DataTrigger>
    </Style.Triggers>
</Style>

This doesn't work. What am I doing wrong? Is there a better solution to this problem?

Was it helpful?

Solution

I managed to find the solution. The problem was the datatrigger binding instead of Data.SaveStatus should be RowData.Row.SaveStatus:

 <Style.Triggers>
                <DataTrigger Binding="{Binding Path=RowData.Row.SaveStatus, UpdateSourceTrigger=PropertyChanged}" Value="{x:Static enums:SaveState.DoneSuccesfuly}">
                    <Setter Property="Source" Value="..\Icons\StatusOk.png"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=RowData.Row.SaveStatus, UpdateSourceTrigger=PropertyChanged}"  Value="{x:Static enums:SaveState.DoneUnsuccesfuly}">
                    <Setter Property="Source" Value="..\Icons\StatusError.png"></Setter>
                </DataTrigger>
            </Style.Triggers>

OTHER TIPS

Try accessing you images like this:

<Style TargetType="{x:Type Image}" x:Key="ImageStatusStyle">
    <Style.Triggers>
        <Setter Property="Source" Value="/ApplicationName;component/Icons/StatusOk.png" />
        <DataTrigger Binding="{Binding Path=Data.SaveStatus, UpdateSourceTrigger=
PropertyChanged}" Value="{x:Static enums:SaveState.DoneUnsuccesfuly}">
            <Setter Property="Source" Value="/ApplicationName;component/Icons/StatusError.png" />
        </DataTrigger>
    </Style.Triggers>
</Style>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top