申し訳ありませんが、リストまたはOCが実際に値の比較を行うため、クラスである必要があります。したがって、同一の値を一意にする必要があります。私はこれをテストし、それは動作します。
<StackPanel Orientation="Vertical" >
<ListBox x:Name="lbStringList" ItemsSource="{Binding Path=UniqueStringList}" DisplayMemberPath="Str" Height="60" VerticalAlignment="Top"/>
<Button Click="Button_Click" Content="56" />
</StackPanel>
private List<UniqueString> uniqueStringList = new List<UniqueString>()
{
new UniqueString("zero",0),
new UniqueString("one",1),
new UniqueString("two",2),
new UniqueString("three",3),
new UniqueString("four",4),
new UniqueString("five",5),
new UniqueString("six",6),
new UniqueString("seven",7),
new UniqueString("zero",8)
};
public MainWindow()
{
InitializeComponent();
}
public List<string> StringList { get { return new List<string>() { "one", "two", "three", "four", "five", "one" }; } }
public List<UniqueString> UniqueStringList
{
get
{
return uniqueStringList;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine(sender.GetHashCode());
lbStringList.ScrollIntoView(lbStringList.Items[8]);
}
public class UniqueString
{
private Int32 id;
public string Str { get; private set; }
public override bool Equals(object obj)
{
UniqueString item = (UniqueString)obj;
return item.id == id;
}
public override int GetHashCode()
{
return id;
}
public UniqueString(string str, Int32 _id) { Str = str; id = _id; }
}