我正在尝试编写一个程序,其中一部分将显示打开的窗口列表(或更具体地说,它们的名称或标题)
因此视图的 XAML 如下所示:
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<ItemsControl ItemsSource="{Binding Windows}" />
这个ViewModel
类看起来像这样:
public ObservableCollection<Window> Windows { get; set; }
public ViewModel()
{
this.Windows = new ObservableCollection<Window>();
this.Windows.Add(new Window());
}
这会导致程序(和设计器视图)抛出InvalidOperationException: Window must be the root of the tree. Cannot add Window as a child of Visual.
似乎问题在于ItemsControl
我认为我实际上想将其Window
本身添加为控件而不是类(我希望窗口显示文本System.Windows.Window
或类似内容)。
我试过添加<ItemsControl.ItemTemplate><DataTemplate>...
,但这似乎有相同的结果。
最后,我尝试WindowHolder
使用 a 的单个公共属性创建一个虚拟类Window
。这似乎可行,但似乎是一种非常不优雅的做事方式,感觉应该更简单。
tl;博士
问题是“你怎么能简单地(最好在 XAML 中)在 WPF 上显示一个窗口标题列表ItemsControl
,绑定到ObservableCollection<Window>
视图模型中的一个?