2014-05-12 81 views
0

我相信這是可能的,但我似乎無法使其工作;這裏是我的視圖模型:在WinRT中綁定到一個靜態屬性

namespace MyApp.ViewModel 
{ 
    public class MainViewModel : INotifyPropertyChanged 
    { 
     private static MainViewModel _mvm; 
     public static MainViewModel MVM() 
     { 
      if (_mvm == null) 
       _mvm = new MainViewModel(); 

      return _mvm; 
     } 

     private string _imagePath = @"c:\location\image.png"; 
     public string ImagePath 
     { 
      get { return _imagePath; } 
      set 
      { 
       SetProperty<string>(ref _imagePath, value); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null) 
     { 
      if (Equals(storage, value)) return false; 

      storage = value; 
      OnPropertyChanged<T>(propertyName); 
      return true; 
     } 

     private void OnPropertyChanged<T>([CallerMemberName]string caller = null) 
     { 
      var handler = PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(caller)); 
      } 
     } 
... 

這裏是我的App.xaml:

xmlns:vm="using:MyApp.ViewModel"> 

<Application.Resources> 
    <ResourceDictionary> 
     <vm:MainViewModel x:Key="MainViewModel" /> 
    </ResourceDictionary> 
</Application.Resources> 

這裏的綁定:

<Page 
... 
    DataContext="{Binding MVM, Source={StaticResource MainViewModel}}"> 

    <StackPanel Orientation="Horizontal" Margin="20" Grid.Row="0"> 
     <TextBlock FontSize="30" Margin="10">Image</TextBlock>    
     <TextBox Text="{Binding ImagePath}" Margin="10"/> 
    </StackPanel> 
... 

我似乎沒有能夠拿到結合工作;我在這裏錯過了什麼?我預計該字段將填充默認值,但不是;我在ViewModel中加入了斷點,但它並沒有打破。

回答

1

對我來說,你的綁定語法是不正確的。 DataContext="{Binding MVM, Source={StaticResource MainViewModel}表示您應該在您的MainViewModel類中擁有「MVM」屬性。在你的情況MVM是一種方法。

嘗試通過屬性更換您的MVM方法。這可能會起作用。

另一種方式來做到這一點,是設置

DataContext="{StaticResource MainViewModel}" 

在這種情況下,MVM方法將被淘汰(我沒有嘗試它的WinRT)

+0

我花幾個小時在看這一點,從來沒有注意到我宣佈它是一個功能!謝謝。 –