ListView 不接受 Stack,但与 List 一起使用



我正在尝试用IHistoryItem对象填充ListView。由于历史应该适用于LIFO,我决定使用Stack<T>作为我的收藏:

private readonly Stack<IHistoryItem> history = new Stack<IHistoryItem>();

现在,当我尝试使用堆栈填充我的 ListView 时,它不显示任何项目:注意:没有错误/警告/异常,只是什么都没有。

this.lvHistory.ItemsSource = this.history;

但是,当我使用以下代码时,它可以工作:

this.lvHistory.ItemsSource = this.history.ToList();

真正的问题是:为什么会这样?

由于.ToList()不与原始堆栈同步,因此每次堆栈更改时我都必须设置绑定,而不是调用lvHistory.UpdateLayout();。 有没有更好的方法?

列表视图在 XAML 中如下所示:

<ListView Name="lvHistory" BorderBrush="{x:Null}" MinHeight="150">
<ListView.ItemTemplate>
<DataTemplate  DataType="{x:Type history:IHistoryItem}">
<TextBlock Text="{Binding ListViewString}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

IHistoryItem 看起来像这样:

public interface IHistoryItem
{
#region Events
event EventHandler ActionRedone;
event EventHandler ActionUndone;
#endregion
#region Properties
string ListViewString { get; }
#endregion
void Redo();
void Undo();
}

由于实现ObservableStack<T>对于这个问题来说有点矫枉过正,所以我走上了另一条路。
这与Stack<T>本身无关,而是ItemsSource没有重新加载,因为它"仍然相同"。
这解决了该问题:

this.lvHistory.ItemsSource = null;
this.lvHistory.ItemsSource = this.history;

感谢@Clemens大开眼界。

相关内容

  • 没有找到相关文章

最新更新