当前位置: 首页 > 知识库问答 >
问题:

WPF ListView在列表视图之间移动时选择添加的项

蒋无尘
2023-03-14

我有一个视图,其中有2个listviews绑定到CollectionViewSources,这些CollectionViewSources是从我的视图模型

每个listview项都被模板化为一个textblock和一个Button-UnitsinMeasureListView.ItemTemplate按钮绑定到一个命令,该命令将该项从其绑定的集合中移除,并将其添加到AvailableUnitsListView上的集合中。

ItemTemplate按钮的情况正好相反,它从availableUnitsListView中移除它,并将其添加到UnitsinMeasureListView中。

这一切都很好,根据需要从每个listview中删除和添加项。

当unitsInMeasureListView仍有焦点时,有没有办法自动选择添加到availableUnitsListView中的项?

 <CollectionViewSource x:Key="unitsInMeasureViewSource" Source="{Binding Path=MeasureUnits}">
                <CollectionViewSource.SortDescriptions>
                    <componentModel:SortDescription PropertyName="UnitInMeasure.IsPredefined" Direction="Descending" />
                    <componentModel:SortDescription PropertyName="UnitInMeasure.Name"  />
                </CollectionViewSource.SortDescriptions>
            </CollectionViewSource>
            <CollectionViewSource x:Key="availableUnitsViewSource" Source="{Binding Path=AvailableUnits}">
                <CollectionViewSource.SortDescriptions>
                    <componentModel:SortDescription PropertyName="UnitInMeasure.IsPredefined" Direction="Descending" />
                    <componentModel:SortDescription PropertyName="UnitInMeasure.Name"  />
                </CollectionViewSource.SortDescriptions>
            </CollectionViewSource>

<ListView Grid.Row="1" x:Name="unitsInMeasureListView" BorderThickness="1" BorderBrush="Gray" VerticalAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Auto" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Source={StaticResource unitsInMeasureViewSource}}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Border Margin="0 3" >
                                    <DockPanel>
                                        <TextBlock x:Name="unitItem" DockPanel.Dock="Left" Height="20" VerticalAlignment="Center" >
                                            <TextBlock.Text>
                                                <MultiBinding StringFormat=" {0} ({1})" >
                                                    <Binding Path="UnitInMeasure.Name" />
                                                    <Binding Path="UnitInMeasure.Symbol" />
                                                </MultiBinding>
                                            </TextBlock.Text>
                                            <TextBlock.Style>
                                                <Style>
                                                    <Style.Triggers>
                                                        <DataTrigger Binding="{Binding Path=UnitInMeasure.IsPredefined}" Value="false">
                                                            <Setter Property="TextBlock.FontStyle" Value="Italic"/>
                                                        </DataTrigger>
                                                    </Style.Triggers>
                                                </Style>
                                            </TextBlock.Style>
                                                <TextBlock.InputBindings>
                                                    <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}, Path=DataContext.EditUnitCommand}" CommandParameter="{Binding Path=UnitInMeasure}" />
                                                </TextBlock.InputBindings>
                                        </TextBlock>
                                        <Button Command="{Binding Path=RemoveUnitFromMeasureCommand}" DockPanel.Dock="Right" HorizontalAlignment="Right" Style="{StaticResource TransparentStyle}" >
                                            <Button.Visibility>
                                                <MultiBinding Converter="{StaticResource multiBindingToVisibilityConverter}">
                                                    <Binding Path="IsSelected" RelativeSource="{RelativeSource AncestorType={x:Type ListViewItem}}"/>
                                                    <Binding Path="IsMeasureEditable"/>
                                                    <Binding Path="CanRemoveUnit" />
                                                </MultiBinding>
                                            </Button.Visibility>
                                            <Image Source="../../Images/Small/navigate_minus.png" ToolTip="Remove unit from measure" >
                                                <Image.Visibility>
                                                    <MultiBinding Converter="{StaticResource multiBindingToVisibilityConverter}">
                                                        <Binding Path="IsFocused" RelativeSource="{RelativeSource AncestorType={x:Type ListViewItem}}"/>
                                                    </MultiBinding>
                                                </Image.Visibility>
                                            </Image>
                                        </Button>
                                    </DockPanel>
                                </Border>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>                        
<ListView Grid.Row="3" x:Name="availableUnitsListView" BorderThickness="1" BorderBrush="Gray" VerticalAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Auto" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Source={StaticResource availableUnitsViewSource}}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Border Margin="3" >
                                    <DockPanel>
                                        <TextBlock  x:Name="measure" Height="20" VerticalAlignment="Center">
                                                <TextBlock.Text>
                                                    <MultiBinding StringFormat=" {0} ({1})" >
                                                        <Binding Path="UnitInMeasure.Name" />
                                                        <Binding Path="UnitInMeasure.Symbol" />
                                                    </MultiBinding>
                                                </TextBlock.Text>
                                                <TextBlock.Style>
                                                    <Style>
                                                        <Style.Triggers>
                                                            <DataTrigger Binding="{Binding Path=UnitInMeasure.IsPredefined}" Value="false">
                                                                <Setter Property="TextBlock.FontStyle" Value="Italic"/>
                                                            </DataTrigger>
                                                        </Style.Triggers>
                                                    </Style>
                                                </TextBlock.Style>
                                        </TextBlock>
                                        <Button Command="{Binding Path=AddUnitToMeasureCommand}" DockPanel.Dock="Right" HorizontalAlignment="Right" Style="{StaticResource TransparentStyle}" >
                                            <Button.Visibility>
                                                <MultiBinding Converter="{StaticResource multiBindingToVisibilityConverter}">
                                                    <Binding Path="IsSelected" RelativeSource="{RelativeSource AncestorType={x:Type ListViewItem}}"/>
                                                    <Binding Path="IsMeasureEditable"/>
                                                </MultiBinding>
                                            </Button.Visibility>
                                            <Image Source="../../Images/Small/navigate_plus.png" ToolTip="Add unit to measure"  >
                                                <Image.Visibility>
                                                    <MultiBinding Converter="{StaticResource multiBindingToVisibilityConverter}">
                                                        <Binding Path="IsFocused" RelativeSource="{RelativeSource AncestorType={x:Type ListViewItem}}"/>
                                                    </MultiBinding>
                                                </Image.Visibility>
                                            </Image>
                                        </Button>
                                    </DockPanel>
                                </Border>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
    /// <summary>
    /// Gets a list of all unit view models currently within this measure.
    /// </summary>
    public ReadOnlyObservableCollection<UnitInMeasureViewModel> MeasureUnits
    {
        get
        {
            return this._measureUnits;
        }
    }
    private readonly ReadOnlyObservableCollection<UnitInMeasureViewModel> _measureUnits;
    private readonly ObservableCollection<UnitInMeasureViewModel> measureUnits;

    /// <summary>
    /// Gets a list of all unit view models currently available to this measure.
    /// </summary>
    public ReadOnlyObservableCollection<UnitInMeasureViewModel> AvailableUnits
    {
        get
        {
            return this._availableUnits;
        }
    }
    private readonly ReadOnlyObservableCollection<UnitInMeasureViewModel> _availableUnits;
    private readonly ObservableCollection<UnitInMeasureViewModel> availableUnits;
    /// <summary>
    /// Adds a unit to this measure.
    /// </summary>
    /// <param name="vm">The view model for the unit to be added.</param>
    internal void AddUnitToMeasure(UnitInMeasureViewModel vm)
    {
        this.availableUnits.Remove(vm);
        this.measureUnits.Add(vm);
    }

    /// <summary>
    /// Removes a unit from this measure.
    /// </summary>
    /// <param name="vm">The view model for the unit to be removed.</param>
    internal void RemoveUnitFromMeasure(UnitInMeasureViewModel vm)
    {
        this.measureUnits.Remove(vm);
        this.availableUnits.Add(vm);
    }

共有1个答案

师建德
2023-03-14

将ListBox中的SelectedItem绑定到视图模型中的某个属性(例如X)。无论何时从ListBox中添加或删除项(AddUnitToMeasure方法和RemoveUnitFromMeasure方法),都需要更新这个X属性以更新ListBox中的选定项。

 类似资料:
  • 问题内容: 我正在尝试使用下面的代码在两个选择列表之间移动项目,但是没有将项目从availableClients列表移动到selectedClients列表,所以有人可以检查下面的代码并让我知道我在这里缺少什么吗?谢谢 控制器: 问题答案: 模板中有几个小问题: 您要将对象从移到,但是第一个选择显示的是从而不是从的选项 您移动的是ID,而不是对象。您的ng-option应该只是 您 删除所有 按钮

  • 我在ggplot2包中有一个时间序列的图,我已经执行了移动平均,我想把移动平均的结果添加到时间序列的图中。 数据集样本(p31): ambtemp DT -1.14 2007-09-29 00:01:57 -1.12 2007-09-29 00:03:57 -1.33 2007-09-29 00:05:57 -1.44 2007-09-29 00:07:57 -1.54 2007-09-29 00

  • 问题内容: 我有一个性别选择列表。 码: 我想使用下拉列表中的图像作为drop-down-icon.jpeg。 我想添加一个按钮代替下拉图标。 怎么做? 问题答案: 在 Firefox中, 您可以将背景图片添加到选项中: 更好的是,您可以像这样将HTML和CSS分开 HTML CSS 在 其他浏览器中 ,唯一的方法是使用某些JS小部件库,例如 jQuery UI ,例如使用Selectable 。

  • 问题内容: 我试图以与从中选择类似的方式选择的列名称。 我似乎找不到解决办法。有没有其他人以前做过此事,或者知道是否有可能? 问题答案: information_schema.columns.Table_name(至少在Sql Server 2000下)包含视图,因此只需使用

  • 我有一个列表视图,当我的活动开始时,我想要第一个项目将有背景,其他项目没有任何背景。之后,如果用户选择任何其他项目,则该特定项目的背景现在将为蓝色,其余部分将没有任何背景。请帮帮我。 My layout_effect.xml 设置默认背景的GetView代码 listview的任何我的onclickListner 我的列表视图xml 请帮帮我,我怎么才能解决这个问题,我从昨天开始就被困在里面了。

  • 我正在尝试添加选项到一个动态选择输入,依赖于在另一个选择下拉菜单中选择的值。 我已经设法在选择父级中的值时填充数据对象。所有的my触发器也会被执行,子select被禁用,它应该包含数据对象中的所有值,但是它没有填充任何选项。 JS(Coffeescript)代码段: 最后一节特别重要,因为这是JSON数据对象应转换为新选项的地方。下面是在一种情况下响应的对象(根据Firebug): 在本例中,儿童