2013-03-05 4 views
3

Я работаю над проектом Windows Phone 8, и я делаю то, что я делал в WPF и WP7 целую вечность, и, похоже, он не работает в Windows Phone 8. Я создал еще один проект и воспроизвел более простую форму этой проблемы. Я создаю новый проект WP8 и выполните следующие действия:Windows Phone 8 Viewmodel Binding

1) Добавить новый класс, TestVM.cs

class TestVM : DependencyObject 
{ 
    public string TestProperty 
    { 
     get { return (string)GetValue(TestPropertyProperty); } 
     set { SetValue(TestPropertyProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for TestProperty. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty TestPropertyProperty = 
     DependencyProperty.Register("TestProperty", typeof(string), typeof(TestVM), new PropertyMetadata(string.Empty)); 
} 

2) Изменить app.xaml так что <Application.Resources /> выглядит следующим образом:

<!--Application Resources--> 
<Application.Resources> 
    <local:TestVM x:Key="MainVM" /> 
    <local:LocalizedStrings xmlns:local="clr-namespace:VMTest" x:Key="LocalizedStrings"/> 
</Application.Resources 

3) Добавить DataContext="{StaticResource MainVM}" в MainPage.xaml.

После загрузки моего приложения, я получаю следующее исключение:

System.Windows.Markup.XamlParseException: Cannot create instance of type 'VMTest.TestVM' [Line: 11 Position: 29] 
    at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) 
    at VMTest.App.InitializeComponent() 
    at VMTest.App..ctor() 

Любых имеет представление о том, что происходит? Как я уже сказал, я могу сделать то же самое в WP7, и все будет хорошо.

+0

Можете ли вы добавить полное внутреннее исключение – Zaki

+0

Является ли это 'TestVM', который должен быть' ViewModel'? то почему это «DependencyObject»? –

+1

Я бы очень рекомендовал использовать MVVM Light, это упрощает такие вещи. – robertk

ответ

7

Вы не можете создать экземпляр объекта в XAML, который не помечен как явно открытый.