我想通過製作魔術卡應用來學習MVVM。我從概念上不知道如何將數據和命令從視圖模型鏈接到View中。我瞭解如何在視圖模型中提供數據,但不知道如何從視圖中訪問數據。命令綁定在UI中引發異常
主要問題是什麼xaml不正確,我得到的按鈕上的異常,我假設與綁定到命令,這也意味着數據可能無法正常工作。
<Window x:Class="MagicDB.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MagicDB"
Title="MainWindow" Width="500" Height="500">
<Window.DataContext>
<local:MainWindowViewModel x:Name="viewModel" />
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50*" />
<RowDefinition Height="450*" />
</Grid.RowDefinitions>
<DataGrid AutoGenerateColumns="False"
HorizontalAlignment="Left"
VerticalAlignment="Top"
IsSynchronizedWithCurrentItem="True" Width="auto" Height="auto" Grid.Row="1">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding CardID}" Width="25" ></DataGridTextColumn>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="110"></DataGridTextColumn>
<DataGridTextColumn Header="Mana" Binding="{Binding Mana}" Width="30" ></DataGridTextColumn>
<DataGridTextColumn Header="Card Text" Binding="{Binding CardTXT}" Width="100*"></DataGridTextColumn>
<DataGridTextColumn Header="Flavor Text" Binding="{Binding FlavorTXT}" Width="100*"></DataGridTextColumn>
<!--DataGridCheckBoxColumn Header="Cost" Binding="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" ></DataGridCheckBoxColumn-->
</DataGrid.Columns>
</DataGrid>
<Button Content="Initiliaze Database" Height="23" HorizontalAlignment="Left" Margin="55,16,0,0" Name="initdb" VerticalAlignment="Top" Width="75"
Command="Binding InitCardDB"/>
</Grid>
主要的問題是一個異常按鈕拋出。我不認爲我也獲得了網格的數據。
namespace MagicDB
{
class MainWindowViewModel : ObservableObject
{
private CardDB _cards;
private Command _InitCardDB;
public CardDB Cards
{
get { return _cards; }
set { _cards = value; OnPropertyChanged("Cards"); }
}
public MainWindowViewModel()
{
//var cards = GetCards();
//var cardViewModels = new List<CardViewModel>();
//cards.ForEach(c => cardViewModels.Add(new CardViewModel(c)));
_InitCardDB = new Command(InitDB, true);
Cards = new CardDB(); ;
}
public Command InitCardDB
{
get
{
if (_InitCardDB == null)
{
_InitCardDB = new Command(
param => InitDB()
);
}
return _InitCardDB;
}
}
private void InitDB()
{
_cards = new CardDB();
_cards.InitDB();
}
}
}
任何幫助將是巨大的,尤其是我在做什麼錯了,在我概念犯了一個錯誤。我可能會完全錯誤地處理這個問題?在此先感謝您的時間。
此外,在我的項目中唯一的命名空間是「MagicDB」其他,它是用於我所有的文件。 – AnthonyFG
聽起來好像你還在研究DataContext是什麼以及綁定是如何工作的。你可能會對我最近寫的博客文章感興趣,用相當簡單的術語來解釋這些概念:[你說的這個「DataContext」是什麼?](http://rachel53461.wordpress.com/2012/07/14/what-是這個datacontext你說的/) – Rachel
謝謝,瑞秋,這正是我需要 – AnthonyFG