我相信这是可能的,但我似乎无法让它发挥作用;这是我的观点模型:
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中放置了断点,但它没有破坏。
答案 0 :(得分:1)
对我而言,您的绑定语法不正确。 DataContext="{Binding MVM, Source={StaticResource MainViewModel}
表示您的MainViewModel类中应该有一个“MVM”属性。在你的情况下,MVM是一种方法。
尝试用属性替换MVM方法。这可能有用。
另一种方法是设置
DataContext="{StaticResource MainViewModel}"
在这种情况下,MVM方法将被淘汰(我没有在WinRT上尝试)