繁体   English   中英

WPF Listview使用ListView Item中的按钮更改可观察的集合属性

[英]WPF listview change observable collection properties with button inside ListView Item

我使用XAML中绑定到Observable集合的WPF列表视图。 下面是我的列表视图项目模板,它生成如下视图

ListView项目看起来像这样

<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM