在WPF中使用XAML设置Window.Datacontext

时间:2015-10-13 10:06:08

标签: c# .net wpf xaml mvvm

我目前正在使用C#涉足WPF 我所拥有的老师知道如何使用Windows窗体,但对WPF并不多。我可以看到,使用GUI有点不同,但看起来很稳固。

在遵循一个小型速成课程时,我试图通过使用XAML添加一个类作为MainWindow的datacontext,但我似乎无法正确执行。我在这里看过很多关于它的帖子,但没有一件事情和我所遇到的一样。这是我的XAML

<Window x:Class="WPFTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WPFTest"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
    <local:AddressBookViewModel />
</Window.DataContext>
<Grid x:Name="WPFTest">
    <Button x:Name="btnNewContact" Content="Create a New Contact" HorizontalAlignment="Left" Margin="10,273,0,0" VerticalAlignment="Top" Width="209"/>
    <Label x:Name="lblName" Content="Name:" HorizontalAlignment="Left" Margin="259,129,0,0" VerticalAlignment="Top"/>
    <Label x:Name="lblEmail" Content="E-Mail:" HorizontalAlignment="Left" Margin="259,160,0,0" VerticalAlignment="Top"/>
    <Label x:Name="lblPhone" Content="Phone:" HorizontalAlignment="Left" Margin="259,191,0,0" VerticalAlignment="Top"/>
    <TextBox x:Name="txtName" HorizontalAlignment="Left" Height="23" Margin="327,133,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    <TextBox x:Name="txtEmail" HorizontalAlignment="Left" Height="23" Margin="327,164,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    <TextBox x:Name="txtPhone" HorizontalAlignment="Left" Height="23" Margin="327,195,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    <ListBox x:Name="lbxContacts" HorizontalAlignment="Left" Height="204" Margin="10,53,0,0" VerticalAlignment="Top" Width="209"/>
</Grid>

我希望用作ViewModel的类:

    namespace WPFTest
{
    public class AddressBookViewModel
    {
        public AddressBookViewModel()
        {

        }

        protected List<Contact> contacts = new List<Contact>();

        protected Contact selectedContact = null;

        public List<Contact> Contacts
        {
            get
            {
                return contacts;
            }
            set
            {
                contacts = value;
            }
        }

        public Contact SelectedContact
        {
            get
            {
                return selectedContact;
            }
            set
            {
                selectedContact = value;
            }
        }
    }
}

然而,这只是给我一个错误:

  The name "AddressBookViewModel" does not exist in the namespace "clr-namespace:WPFTest".

我根本不理解出了什么问题。在我看来,AddressBookViewModel确实存在于这个命名空间中,但Visual Studio显然不同意。

有人可以向我解释这个问题吗?

我知道我可以在后面的代码中绑定Datacontext,但是,我可以看到能够在XAML中执行它的价值

1 个答案:

答案 0 :(得分:0)

您的代码似乎在这里工作正常: enter image description here

您粘贴的错误消息(...在命名空间中不存在...)是构建时错误的结果。您在模型中使用的“联系”类可能有错误?无论如何,有些东西。