我窗口的XAML看起來是這樣的:ListBox的死簡單MVVM應用程序保持空 - 我錯過了什麼?
<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
到當前DataContext
的Cronjobs
財產。在DataContext在代碼隱藏的構造函數設置爲視圖模型的實例如下:
public partial class MainWindow : Window
{
private CronjobViewModel cronjobViewModel;
public MainWindow()
{
InitializeComponent();
this.cronjobViewModel = new CronjobViewModel();
this.DataContext = cronjobViewModel;
}
}
視圖模型看起來是這樣的:
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"; }
}
我主要經歷了網絡的發展和新的WPF和MVVM的組合。我花了近10個小時弄清楚了這一點,但仍然沒有看到原因。我也試過DataGrid。我觀看了關於MVVM約0123的前半部分Jason Dolingers Video,並仔細研究了它是如何做到的,但它對我來說不起作用,即使我理解了MVVM的抽象概念。我非常確定我只是無意中忽略了XAML中應該存在的某些內容,但是顯示屬性名稱和項目模板並沒有幫助(根據我在互聯網上發現的內容和它們甚至不需要)。有人在這段代碼中看到錯誤嗎?
對不起,代碼轉儲很大,我用更緊湊的方式格式化了「無聊」的部分。
謝謝。我一直在想,爲什麼有時候人們會在類成員後面寫下getter和setter。現在我將閱讀C#中字段和屬性的區別。我想我錯過了那個話題。 –
@Shrooms,這裏是[鏈接](http://msdn.microsoft.com/en-us/library/ms743643.aspx#binding_sources)解釋什麼是有效的綁定源。 – dkozl
謝謝,這對我來說很方便。 –