[英]WPF listview change observable collection properties with button inside ListView Item
我使用XAML中绑定到Observable集合的WPF列表视图。 下面是我的列表视图项目模板,它生成如下视图
<DataTemplate x:Key="ImageOverlayAlbumDataTemplate">
<Grid>
<Grid Margin="5,5,5,5">
<Border BorderBrush="LightGray" BorderThickness="1">
<StackPanel Orientation="Vertical" Background="White" Height="50" Width="240" VerticalAlignment="Center">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Border Name="ActionStatusIndicator" Height="50" Width="7" Margin="0" Grid.RowSpan="2">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=statusid}" Value="3">
<Setter Property="Background" Value="SteelBlue"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=statusid}" Value="4">
<Setter Property="Background" Value="LightGray"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=statusid}" Value="5">
<Setter Property="Background" Value="Orange"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=statusid}" Value="6">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<!--</StackPanel>-->
<TextBlock Text="{Binding subject}" Margin="10,0,0,0" Width="230" Height="20" FontSize="13"
TextTrimming="CharacterEllipsis" HorizontalAlignment="Left" TextAlignment="Left"
Grid.Row="0" Grid.Column="1"/>
<TextBlock Text="{Binding Path=displayname}" FontSize="10" Margin="10,3,0,0" Width="110" Height="20"
TextTrimming="CharacterEllipsis" HorizontalAlignment="Left" TextAlignment="Left"
Grid.Row="1" Grid.Column="1"/>
<Image x:Name="sideButton" Source="/Icons/action.png" Width="20" Height="20" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right" >
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Visibility" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListViewItem}},Path=IsMouseOver}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListViewItem}},Path=IsMouseOver}" Value="True" />
<Condition Binding="{Binding Path=StatusID}" Value="3" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</Grid>
</StackPanel>
</Border>
</Grid>
</Grid>
</DataTemplate>
当用户单击鼠标悬停时出现的图像(刻度)时,我想将“ StatusId”更改为其他数字。
StatusID以int形式出现在ActionView类中,并且上面的列表绑定到
将您的Image元素更改为您重新模板化以显示为图像的Button:
<Button Width="20" Height="20" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right"
Command={Binding Path=ChangeStatusCommand}>
<Button.Template>
<ControlTemplate>
<Image x:Name="sideButton" Source="/Icons/action.png" >
...
您可能想将触发器移到模板或按钮上...
并且您需要在具有StatusID的同一对象中创建一个ICommand(或实现该对象的东西)(或者也可以在其他位置创建它),但是在那个位置上,您需要引用具有IdentityID的对象。 StatusID)现在,您可以编写C#代码来更改推送图像时的StatusID。 您还需要确保StatusID属性使用INotifyPropertyChange事件来提醒要更新的XAML。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.