我有一个ListBox
,其中放入了数据。简单的字符串,没有极端。但是,用户选择数据将是什么,他可以和两个不同的(!!!)对象,它们具有相同的名称。
示例:用于连接图片。每张照片都有一个名字。用户选择图片并将其添加到列表框中。但是,如果他选择两张具有相同名称的图片,则选择列表框中的项目会发生这种情况:
我该怎么做才能避免这种情况?我只想要一个突出显示和选中的项目。 列表框设置在单个选择上,在选择事件上,它表示只选择了一个项目。所以它只涉及亮点。 (使用WPF,C#)
答案 0 :(得分:1)
要避免这种情况,你必须在字符串周围使用包装;您的图片对象似乎是个不错的开始。
以下是一个说明两种方法的示例:
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];
}
}
}
您还可以绑定更多信息,例如扩展名,大小或可以帮助用户的任何属性。
希望这会有所帮助......