我學習MVVM和做練習從數據類將數據傳遞到一個視圖
我試圖讓一個應用程序,您可以添加和查看學生的一切正常,直到我試圖分開創建一個應用程序從ViewModel的其餘部分獲取Observable集合,並能夠使用其他ViewModel。
我的問題是如何使用ObservableCollection或任何ViewModel之外的任何其他類型的數據持有者?
如果您需要密碼,請告訴我嗎?
這裏是在Solution Explorer中的數據 類的文件路徑爲數據/數據庫
public class StudentDatabase
{
#region Defining and Populating an ObservableCollection
// Defining an observable collection to hold the students
private ObservableCollection<Student> studentData;
// Populating the ObservableCollection
public StudentDatabase()
{
studentData = new ObservableCollection<Student>()
{
new Student(){Name="John", Surname="Smith", Age=17},
new Student(){Name="Barbara", Surname="Johnson", Age=16}
};
}
// Defining and setting the field for the Observable collection
public ObservableCollection<Student> StudentData
{
get { return studentData; }
set { RaisePropertyChanged("studentData"); }
}
#endregion
#region RaisePropertyChange implementation
/// <summary>
/// INotifyPropertyChanged implementation:
/// A property notifies something that it has changed
/// and the other object get's the new data
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
這裏是頁面的XAML,我想表明它
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="15*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ListBox DataContext="{Binding Path=Data.StudentDatabase}"
ItemsSource="{Binding StudentData}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="Name"
Grid.Column="0"
Text="{Binding Name}"/>
<TextBlock x:Name="Surname"
Grid.Column="1"
Text="{Binding Surname}"/>
<TextBlock x:Name="Age"
Grid.Column="2"
Text="{Binding Age}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
和搜索窗升C代碼
public partial class Search: Window
{
public Search()
{
InitializeComponent();
}
}
我在輸出該錯誤w^indow在Visual Studio
System.Windows.Data Error: 40 : BindingExpression path error: 'Data' property not found on 'object' ''StudentDatabase' (HashCode=2650314)'. BindingExpression:Path=Data.StudentDatabase; DataItem='StudentDatabase' (HashCode=2650314); target element is 'ListBox' (Name=''); target property is 'DataContext' (type 'Object')
我想在列表框中的更新是動態的,所以我不包括更新按鈕
編輯:我已經更新了代碼,但我覺得我沒有做某事再次正確,有人能照亮我嗎?
編輯:如果我在代碼隱藏一切設置DataContext的是確定,但如果我嘗試onlt設置的DataContext在XAML特定的控制,然後我不明白列表不顯示數據
這裏是Skydrive,我上傳的項目
一個鏈接,如果代碼隱藏這是一切工作
InitializeComponent();
DataContext = new Data.StudentDatabase();
,但如果我不使用代碼隱藏,並做到在XAML像這樣的事情發生
DataContext="{Binding Path=Data.StudentDatabase}"
我明顯缺少在這裏
是的,我們需要的代碼 – geedubb
@geedubb這是 –