3

こんにちは、私は WPF を初めて使用します。リスト ビューを使用してグリッド ビューとしてレンダリングしました。パスをバインドして値を設定する画像列があります。問題は、条件に基づいて画像のパスを変更する必要があることです。条件が true の場合、画像のパスを異なるものにする必要があります。false の場合、別のパスに変更します。これは行ごとに行うことができますか?以下は私のリストビューです。助けてください

<ListView Name="LstGrd" Margin="0,105,0,138">
    <ListView.View>
        <GridView  >
            <GridViewColumn Header=" Name" Width="120" DisplayMemberBinding="{Binding Path=Name}" />
            <GridViewColumn Header=" Address" Width="250" DisplayMemberBinding="{Binding Path=Address}" />
            <GridViewColumn Header=" City" Width="50" DisplayMemberBinding="{Binding Path=City}" />
            <GridViewColumn Header=" State" Width="75" DisplayMemberBinding="{Binding Path=State}" />
            <GridViewColumn Header=" PostalCode" Width="75" DisplayMemberBinding="{Binding Path=PostalCode}" />
            <GridViewColumn>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Width="16" Name="Test" Height="16" Source="{Binding Path=ImagePath,Mode=TwoWay}"/>
                            <TextBlock Text="Status"/>
                        </StackPanel>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>
4

2 に答える 2

3

私があなたの問題を正しく理解していれば、状況が変化した場合に画像を変更したいと考えています。リストビューにバインドしているクラスのダミー バージョンを作成し、これを示すために「IsSelected」というプロパティを追加しました。

<ListView Name="LstGrd" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <ListView.View>
        <GridView  >
            <GridViewColumn Header="">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding IsSelected}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header=" Name" Width="120" DisplayMemberBinding="{Binding Path=Name}" />
            <GridViewColumn Header=" Address" Width="250" DisplayMemberBinding="{Binding Path=Address}" />
            <GridViewColumn Header=" City" Width="50" DisplayMemberBinding="{Binding Path=City}" />
            <GridViewColumn Header=" State" Width="75" DisplayMemberBinding="{Binding Path=State}" />
            <GridViewColumn Header=" PostalCode" Width="75" DisplayMemberBinding="{Binding Path=PostalCode}" />
            <GridViewColumn>
                <GridViewColumn.CellTemplate>
                        <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Width="16" Name="Test" Height="16" Source="{Binding Path=ImagePath,Mode=TwoWay}"/>
                            <TextBlock Text="Status"/>
                        </StackPanel>
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding IsChecked}" Value="True">
                                <Setter Property="Source" Value="{Binding Path=ImagePath2}" TargetName="Test" />
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

ここで注目すべき点は、列を追加したことです (これはオプションです。説明を簡単にするために追加しただけです)。次に、Image 列で、そのプロパティの変更を処理するDataTriggerために を追加する必要があります。DataTemplate

以下は DataTemplate のみです。

<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <Image Width="16" Name="Test" Height="16" Source="{Binding Path=ImagePath,Mode=TwoWay}"/>
         <TextBlock Text="Status"/>
    </StackPanel>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding IsChecked}" Value="True">
            <Setter Property="Source" 
                    Value="{Binding Path=ImagePath2}" 
                    TargetName="Test" />
         </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

これは XAML のみの実装であるため、コンバーターよりも優れています。

于 2013-03-08T14:03:59.900 に答える
0

コンバーターを使用する必要があります。

<Image Source="{Binding Path = ImagePath, Mode = TwoWay, Converter={StaticResource imageToValidatedImageConv}}" />

imageToValidatedImageConvは、次のように定義されたリソースです。<local:ImageToValidatedImageConverter x:Key="imageToValidatedImageConv" />

コンバーターは次のようなクラスです。

public class ImageToValidatedImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if()
            {
                //return image1 
            }
            else
            {
                //return image2
            }

        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new Exception("Cant convert back");
        }
    }
于 2013-03-08T14:00:23.323 に答える