WPF将ListBox绑定到ViewModel集合而不将DataContext直接绑定到集合

时间:2018-04-20 06:48:42

标签: c# wpf data-binding listbox datacontext

我试图将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.colorsItemsSource="{Binding}",但这似乎是错误的,并阻止我在虚拟机中使用其他集合。

我真的很想知道为什么我的{Binding colors}在这种情况下不起作用。

0 个答案:

没有答案