1

我的窗口的 XAML 如下所示:

<Window x:Class="Binding1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Cronjobs" Height="350" Width="525">
    <Grid>
        <ListBox HorizontalAlignment="Stretch" Margin="10" VerticalAlignment="Stretch" ItemsSource="{Binding Cronjobs}" />
    </Grid>
</Window>

可见,我将 ListBox 绑定ItemsSource到 current 的Cronjobs属性DataContext。DataContext 在代码隐藏的构造函数中设置为下面的 ViewModel 的一个实例:

public partial class MainWindow : Window
{
    private CronjobViewModel cronjobViewModel;

    public MainWindow()
    {
        InitializeComponent();
        this.cronjobViewModel = new CronjobViewModel();
        this.DataContext = cronjobViewModel;
    }
}

ViewModel 看起来像这样:

class CronjobViewModel : DependencyObject
{
    public ObservableCollection<Cronjob> Cronjobs;

    public CronjobViewModel( )
    {
        this.Cronjobs = new ObservableCollection<Cronjob>();
        this.Cronjobs.Add( new Cronjob() );
        this.Cronjobs.Add( new Cronjob() );
    }
}

为了快速简单的调试,我现在手动将一些项目添加到集合中。该类是实际模型,它Cronjob只不过是一个具有一些简单字符串属性的类,简化为基本部分:

class Cronjob {
    private string name;
    public string Name { get { return this.name; } set { this.name = value; } }
    public Cronjob( ) { this.Name = "Herp"; }
}

我主要在 Web 开发方面经验丰富,并且对 WPF 和 MVVM 的组合不熟悉。我现在花了将近 10 个小时来解决这个问题,但仍然看不到原因。我还尝试了 DataGrid。我看了大约三遍Jason Dolingers Video的前半部分关于 MVVM 的内容,并仔细研究了它是如何做到的,但它对我不起作用,即使我理解了 MVVM 的抽象概念。我很确定我只是无意中遗漏了 XAML 中应该存在的一些东西,但是弄乱显示属性名称和项目模板并没有帮助(根据我在互联网上到处找到的内容,它们甚至没有必要)。有人看到此代码中的错误吗?

对于大型代码转储,我很抱歉,我以更紧凑的方式格式化了“无聊”的部分。

4

2 回答 2

6

这是因为Cronjobs是一个字段,您不能绑定到字段。尝试将其更改为属性:

public ObservableCollection<Cronjob> Cronjobs { get; set; }
于 2013-07-19T08:02:29.203 回答
0

这应该工作;)

    public class CronjobViewModel
    {
        public ObservableCollection<Cronjob> Cronjobs { get; private set; }

        public CronjobViewModel()
        {
            this.Cronjobs = new ObservableCollection<Cronjob>();
            this.Cronjobs.Add(new Cronjob());
            this.Cronjobs.Add(new Cronjob());
        }
    }
于 2013-07-19T08:03:40.683 回答