我试图将ListBox的ItemSource设置为绑定到viewmodel中的集合,但除非我使DataContext直接等于该集合,否则它不会工作(例如DataContext= vm.colorList
}而不仅仅是vm。
基本上,我有一个看起来像这样的ViewModel:
public class MosaicBoard
{
public ObservableCollection<Rectangle> colors = new ObservableCollection<Rectangle>();
public List<string> testList = new List<string>();
public ObservableCollection<MosaicCellItem> boardSquares = new ObservableCollection<MosaicCellItem>();
public MosaicBoard()
{
for (int i = 0; i < 50; i++)
{
for (int j = 0; j < 50; j++)
{
boardSquares.Add(new MosaicCellItem() {Col = j, Row=i});
}
}
colors.Add(new Rectangle() { Width = 90, Height = 90, StrokeThickness = 1, Fill = new SolidColorBrush(Colors.Blue) });
testList.Add("test1");
}
}
使用它的视图如下所示:
public partial class MainWindow : Window
{
private Point startPoint;
public MosaicBoard vm = new MosaicBoard();
public MainWindow()
{
InitializeComponent();
this.DataContext = vm;
}
}
和XAML看起来像这样:
<ListBox x:Name="listbox" ItemsSource="{Binding colors}" />
据我所知,这应该通过引用viewmodel中的集合来工作。为了使它工作,我必须使DataContext = vm.colors
和ItemsSource="{Binding}"
,但这似乎是错误的,并阻止我在虚拟机中使用其他集合。
我真的很想知道为什么我的{Binding colors}在这种情况下不起作用。