我在將我的View Model
綁定到我的View
時遇到問題。我是MVVM
的初學者,但我相信我正在實施我的系統(幾乎)。我有一個Model
,其中包含的數據是我在View Model
中獲得的數據,然後當我的頁面導航到時,我試圖抓取View Model
數據並將其綁定到View
。如何將視圖模型綁定到視圖
我的問題是,我在我的View
中有一個ListBox
,每個項目有3個對象,我似乎無法爲我的列表中的每個項目正確綁定它。
MainPage.xaml中
<ListBox x:Name="FavoritesListBox" ItemsSource="{Binding FavoriteItems}"
SelectionChanged="FavoritesListBox_SelectionChanged">
<StackPanel Orientation="Horizontal" Margin="12,0,12,0">
<Image x:Name="favicon" Source="{Binding Favicon}"
Width="50" Height="50"/>
<StackPanel>
<TextBlock x:Name="favoritesName" Text="{Binding Name}"
FontSize="{StaticResource PhoneFontSizeExtraLarge}"/>
<TextBlock x:Name="favoritesAddress"
Text="{Binding Address}" Margin="12,0,0,0"/>
</StackPanel>
</StackPanel>
</ListBox>
MainPage.xaml.cs中
public FavoritesPage()
{
InitializeComponent();
// Set the data context of the listbox control to the sample data
FavoritesListBox.DataContext = App.ViewModel;
}
App.xaml.cs
private static MainViewModel viewModel = null;
public static MainViewModel ViewModel
{
get
{
// Delay creation of the view model until necessary
if (viewModel == null)
viewModel = new MainViewModel();
return viewModel;
}
}
個MainViewModel.cs
public ObservableCollection<ItemViewModel> FavoriteItems { get; private set; }
public MainViewModel()
{
//FavoriteItems = new ObservableCollection<ItemViewModel>();
FavoriteItems = Settings.FavoritesList.Value;
}
Settings.cs(模型)
public static Setting<ObservableCollection<ItemViewModel>> FavoritesList =
new Setting<ObservableCollection<ItemViewModel>>(
"Favorites",
new ObservableCollection<ItemViewModel>());
ItemViewModel.cs
private string _favicon;
public string Favicon
{
get
{
return _favicon;
}
set
{
if (value != _favicon)
{
_favicon = value;
NotifyPropertyChanged("Favicon");
}
}
}
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
NotifyPropertyChanged("Name");
}
}
}
private string _address;
public string Address
{
get
{
return _address;
}
set
{
if (value != _address)
{
_address = value;
NotifyPropertyChanged("Address");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
..和這是在哪裏以及如何我保存每個項目(應該有三個屬性列在ItemViewModel
void addToFavorites_Click(object sender, EventArgs e)
{
var favoriteItem =
new ItemViewModel{
Favicon = "",
Name = "",
Address = TheBrowser.currentUrl() };
Settings.FavoritesList.Value.Add(favoriteItem);
}
凡FavoritesList
是使用ItemViewModel
含有3名對象進行填充。該列表正在填充正確,因爲在調試期間,我可以看到FavoritesList
中的實體,但我有一個問題調用view model
中的這些實體出現在我的ListBox
的view
?
我相信我綁定不正確,但我不知道如何解決這個問題?
http://stackoverflow.com/questions/12151618/creating-contextbinding-xaml可以幫助你。我一直在做同樣的事情。 – timmy
如果您知道我們將爲您的視圖使用視圖模型來綁定某些屬性,爲什麼我們使用視圖模型的「延遲創建」? –
我在你的XAML中看不到你的'ListBox.ItemTemplate'。你的'ListBox'被填充了一個'ItemViewModel'的集合,但是你需要將'ListBox.ItemTemplate'設置爲一個'DataTemplate',其中包含綁定到'ItemViewModel'的控件來告訴WPF如何繪製每個'ItemViewModel'' – Rachel