[英]Dynamically change path of an image in ListView
大家好我是WPF的新手,我使用列表視圖渲染為網格視圖。 我有一個圖像列,我通過綁定路徑來設置值。 現在的問題是我需要根據條件改變圖像的路徑。 如果條件為真,我需要圖像的路徑不同。 如果為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>
如果我正確理解您的問題,您希望在某些條件發生變化時更改圖像。 我創建了一個綁定到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>
這里要注意的是我添加了一個列(這是可選的 - 我這樣做是為了讓它更容易演示)。 然后,在Image列中,需要向DataTemplate
添加DataTrigger
以處理該屬性更改。
這里只是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>
這比Converter更有優勢,因為它只是一個XAML實現。
你應該使用轉換器:
<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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.