绑定到WinRT中的静态属性

时间:2014-05-12 07:17:38

标签: xaml mvvm binding windows-runtime winrt-xaml

我相信这是可能的,但我似乎无法让它发挥作用;这是我的观点模型:

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 个答案:

答案 0 :(得分:1)

对我而言,您的绑定语法不正确。 DataContext="{Binding MVM, Source={StaticResource MainViewModel}表示您的MainViewModel类中应该有一个“MVM”属性。在你的情况下,MVM是一种方法。

尝试用属性替换MVM方法。这可能有用。

另一种方法是设置

DataContext="{StaticResource MainViewModel}"

在这种情况下,MVM方法将被淘汰(我没有在WinRT上尝试)