0

我有一个ListBox,其中放置了数据。简单的字符串,没有什么极端的。但是,用户可以选择数据是什么,他可以选择两个不同的(!!!)具有相同名称的对象。

示例:与图片连接使用。每张照片都有一个名字。用户选择图片并将它们添加到列表框中。但是,如果他选择了两张同名的图片,就会发生在列表框中选择项目的情况:

图片

为了避免这种情况,我该怎么办?我只想要一个突出显示和选定的项目。列表框设置在单个选择上,并且在选择事件上,它表示只选择了一个项目。所以它只涉及亮点。(使用 WPF、C#)

4

1 回答 1

1

为避免这种情况,您必须在字符串周围使用包装器;您的Picture对象似乎是一个好的开始。

以下示例说明了这两种方法:

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:local="clr-namespace:WpfApplication1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <ListBox x:Name="list1" ItemsSource="{Binding Pictures1}" />
        <ListBox x:Name="list2" ItemsSource="{Binding Pictures2}" Grid.Column="1" DisplayMemberPath="Name" />
        <TextBox Text="{Binding Text}" Grid.Row="1"/>
        <Button Content="+" Grid.Row="1" Grid.Column="1" Click="Button_Click"/>
    </Grid>
</Window>

后面的代码:

using System.Windows;
using System.Windows.Media;
using System.Windows.Input;
using System.Windows.Controls;
using System.Collections.ObjectModel;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public class Picture
        {
            public string Name { get; set; }
        }

        public string Text { get; set; }
        public ObservableCollection<string> Pictures1 { get; set; }
        public ObservableCollection<Picture> Pictures2 { get; set; }

        public MainWindow()
        {
            InitializeComponent();

            Pictures1 = new ObservableCollection<string>();
            Pictures2 = new ObservableCollection<Picture>();

            DataContext = this;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Pictures1.Add(Text);
            Pictures2.Add(new Picture { Name = Text });

            list1.SelectedItem = Pictures1[0];
            list2.SelectedItem = Pictures2[0];
        }
    }
}

您还可以绑定更多信息,例如扩展名、大小或任何可以帮助用户的属性。

希望这可以帮助...

于 2013-06-15T23:41:54.837 回答