Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态更改ListView中图像的路径_C#_Wpf_Listview - Fatal编程技术网

C# 动态更改ListView中图像的路径

C# 动态更改ListView中图像的路径,c#,wpf,listview,C#,Wpf,Listview,大家好,我是WPF新手,我使用了列表视图作为网格视图进行渲染。我有一个image列,通过绑定路径为其设置一个值。现在的问题是,我需要根据条件更改图像的路径。如果条件为真,我需要图像的路径不同。如果为false,我将其更改为另一条路径。这可以一行一行地做吗?下面是我的列表视图。请帮忙 <ListView Name="LstGrd" Margin="0,105,0,138"> <ListView.View> <GridView >

大家好,我是WPF新手,我使用了列表视图作为网格视图进行渲染。我有一个image列,通过绑定路径为其设置一个值。现在的问题是,我需要根据条件更改图像的路径。如果条件为真,我需要图像的路径不同。如果为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>

您应该使用转换器:

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

如果我正确理解您的问题,如果某些条件发生变化,您希望更改图像。我创建了绑定到listview的类的虚拟版本,并添加了一个名为“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>

这比转换器有优势,因为它是一个仅使用XAML的实现。

只有在绑定到网格后,条件才会更改。也就是说,我只有在默认情况下将图像绑定到网格后才检查条件。在这种情况下,这是否可行(根据条件逐行更改图像)。抱歉,如果我听起来很愚蠢,我是新手。每个GridViewColumn定义所做的是控制特定行中特定单元格的显示方式。您正在显示此名称、地址等。对于DataTemplate,您正在控制此数据段在此单元格中的显示方式(即,您正在显示为“Contact”类的此实例定义的ImagePath)。DataTrigger所做的是检查此实例的另一个属性,并将仅此实例的映像替换为ImagePath2。因此,是的,它将根据该条件逐行更改。很抱歉打扰您,我还有另一个问题,Datatrigger何时调用。它是否仅在数据绑定期间。或者以这种方式放置,我需要更改按钮上的图像单击data Trigger如何在该场景中实现。感谢您的帮助我将这样做。向Contact类添加两个新属性,并在该类上实现接口(这是WPF.Google it.Understand it.Love it的一个非常重要的接口)。属性之一是保留新图像的路径(上例中的ImagePath2)。当您处理按钮单击时,将设置其他属性…(续)…如果您正确实现INotifyChanged,WPF系统将让绑定到该属性的任何人知道它需要使用新值。这包括在上面的DataTrigger中。因此,为了回答这个问题,它将自动发生(假设您正确设置了所有内容)。如果我必须在单击按钮时更改图像,是否可以实现此操作。请不要确定我是否遵循了您假装的操作。IValueConverter接口为您提供了将自定义逻辑应用于绑定的方法。如果您计划根据按钮事件单击更改图像,您可以按照通常的方式进行操作。请向我演示如何通过单击按钮更改列表视图中的图像,或向我指出一些文章。谢谢您的帮助
<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>
<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>