WPF列表框滚动至底部
问题描述:
我使用的ObservableCollection作为我的ListBox组件的的ItemSource:WPF列表框滚动至底部
但控制的行为不是适当的给我。我已经向下滚动到我收藏中的第一次发生,但不是最后一次。
样品名单是:1,1,2,3,4,5,6,7,8,9,11,22,33,1
当你enetr最后1个您组件向上滚动到第一个:)。这不是我渴望的。
请指教。这里的组件代码:
public class MyListBox : ListBox
{
protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
base.OnItemsChanged(e);
if (Items.Count > 0)
{
var item = Items[Items.Count - 1];
UpdateLayout();
ScrollIntoView(item);
UpdateLayout();
}
}
}
答
对不起,但它需要是一个类作为List或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; }
}
You have and ObservableCollection?如果你的最后一个项目是33是否有效?如果是这样,那么对ListItems进行相等比较。尝试列表,因为它可能会有不同的表现。如果不是,那么你需要绑定到一个自定义的类,在那里你实现GetHashCode并且覆盖Equals,所以第一个1不等于最后的1. –
Paparazzi
2012-04-03 19:42:35
是的,如果33这样工作的很好,因为在集合之前没有33。我必须使用ObservableCollection来满足数据源的更改。它可惜绑定到自定义类的所有:( – alerya 2012-04-03 19:56:06