【发布时间】:2019-10-08 05:57:24
【问题描述】:
我有一个 ListView 绑定到对象的 ObservableCollection。在这旁边,我有一堆 TextBoxes 和 ComboBoxes,它们被 TwoWay 绑定到该 ListView 的 SelectedItem 的属性。我的 ListView 中的项目具有 INotifyPropertyChanged。这样用户就可以从 ListView 中选择一个项目并编辑它的属性。
但是编辑大量项目需要很长时间,所以我希望用户能够选择多个项目并使用 ListView 旁边的控件一次编辑所有选定项目的属性。
我已经尝试将 DataContext 更改为 ListView 的 SelectedItems 属性,但没有成功。
谁能告诉我该怎么做?
编辑: 为了澄清,当用户选择多个项目时,我希望 ListView 旁边的编辑控件不显示任何内容,然后只有当用户更改这些控件中的某些内容时,更改才会转到所有 SelectedItems 并且更改在 TextBox 中保持可见或 ComboBox,因为这样该属性在所有 SelectedItems 中都是相同的。
<StackPanel x:Name="EditPanel" Grid.Row="0" Grid.RowSpan="2" DataContext="{Binding SelectedItem, ElementName=LayersList}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CanVerticallyScroll="True">
<TextBlock FontSize="14" HorizontalAlignment="Stretch" Foreground="#FFD6D6D6" Margin="0,10,0,0"><Run Text="Name:"/></TextBlock>
<TextBox x:Name="SelectedNameBox" HorizontalAlignment="Stretch" TextWrapping="NoWrap" Foreground="#FFD6D6D6" Text="{Binding Name, Mode=TwoWay}"/>
<TextBlock FontSize="14" HorizontalAlignment="Stretch" Foreground="#FFD6D6D6" Margin="0,10,0,0"><Run Text="Hitsound info:"/></TextBlock>
<ComboBox x:Name="SelectedSampleSetBox" Margin="0,10,0,0" HorizontalAlignment="Stretch" Text="{Binding SampleSetString, Mode=TwoWay}" Cursor="Hand">
<ComboBoxItem Content="Normal" HorizontalAlignment="Left" Cursor="Hand"/>
<ComboBoxItem Content="Soft" HorizontalAlignment="Left" Cursor="Hand"/>
<ComboBoxItem Content="Drum" HorizontalAlignment="Left" Cursor="Hand"/>
</ComboBox>
<ComboBox x:Name="SelectedHitsoundBox" Margin="0,10,0,0" HorizontalAlignment="Stretch" Text="{Binding HitsoundString, Mode=TwoWay}" Cursor="Hand">
<ComboBoxItem Content="Normal" HorizontalAlignment="Left" Cursor="Hand"/>
<ComboBoxItem Content="Whistle" HorizontalAlignment="Left" Cursor="Hand"/>
<ComboBoxItem Content="Finish" HorizontalAlignment="Left" Cursor="Hand"/>
<ComboBoxItem Content="Clap" HorizontalAlignment="Left" Cursor="Hand"/>
</ComboBox>
...
</StackPanel>
【问题讨论】:
-
当您选择多个项目时,您希望相关数据出现在哪里?由于您不知道用户会选择多少,因此您希望动态添加多个控件。
-
一种选择是在可编辑的 DataGrid(甚至是自定义的 ListView)中显示列表,以便您可以就地编辑项目。
-
@Sach 我编辑了这个问题以便进一步澄清。
-
更新了答案。
标签: c# wpf xaml listview data-binding