我有一個畫布作爲ItemsPanel的列表框。帶畫布的WPF列表框只顯示最後一項
<UserControl.Resources>
<DataTemplate x:Key="itemTemplate">
<Border BorderBrush="LightBlue" BorderThickness="1">
<Grid Margin="0,2,2,2" Width="{Binding Width}" Height="{Binding Height}">
<Rectangle Cursor="Hand" Fill="AliceBlue"
MouseDown="Rectangle_MouseDown"
MouseMove="Rectangle_MouseMove"
MouseUp="Rectangle_MouseUp"/>
<Label Content="{Binding Name}" Margin="5" IsHitTestVisible="False"/>
</Grid>
</Border>
</DataTemplate>
</UserControl.Resources>
<ListBox ItemsSource="{Binding Items}"
x:Name="listBox"
SelectionMode="Extended"
ItemTemplate="{StaticResource itemTemplate}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="Transparent"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Canvas.Left" Value="{Binding X}"/>
<Setter Property="Canvas.Top" Value="{Binding Y}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
問題是,無論何時我將新項目添加到項目,哪個Listbox綁定到,它只顯示屏幕上的新項目。列表中的所有以前的項目都未顯示。我可以看到所有的項目確實在Items列表中,並且ListBoxItems被添加到可視化樹中。但我看不到他們。只添加最後一項。
這是什麼樣子的運行(僅過一個項目顯示)
這是什麼樣子的設計師,它看起來應該像跑步
有什麼建議嗎?
更新1
的設計人員使用的代碼是這個
public class DrawingPanelViewModelMockup: DrawingPanelViewModel
{
public DrawingPanelViewModelMockup()
{
//Pc subclasses DrawingComponent
var pc = new Pc();
pc.Name = "PC";
pc.X = 20;
pc.Y = 40;
pc.Width = 100;
pc.Height = 50;
Items.Add(pc);
...
}
}
而且,增加了項目(的ObservableCollection)真正的代碼是這樣的。它是拖放式操作的一部分。
var comp = e.Data.GetData(typeof(DrawingComponent).FullName) as DrawingComponent;
var drawingPanelVm = ServiceLocator.Current.GetInstance<DrawingPanelViewModel>();
comp.X = mousePos.X;
comp.Y = mousePos.Y;
comp.Width = 100;
comp.Height = 50;
drawingPanelVm.Items.Add(comp);
Is Items a List or ObservableCollection?你的代碼適合我。 –
您還應該顯示實際添加項目的代碼。它與設計模式代碼有什麼不同? – Clemens
@EdPlunkett這是一個ObservableCollection,請參閱我的更新 – smok