在View中从ViewModel实例设置公共属性需要添加什么?我想在ViewModel资源上设置一些属性,而不是从我视图中的某个元素绑定它。
查看XAML:
<UserControl.Resources>
<vm:MainViewModel x:Key="mainViewModel" MyProperty="30" />
</UserControl.Resources>
<UserControl.DataContext>
<Binding Source={StaticResource mainViewModel}" />
</UserControl.DataContext>
MainViewModel.cs(实现INotifyPropertyChanged)
private int _myProperty;
public int MyProperty{
get { return _myProperty; }
set
{
_myProperty = value;
OnPropertyChanged("MyProperty");
}
}
永远不会调用MyProperty上的setter。必须有一些基本的MVVM我做错了。
答案 0 :(得分:0)
通常,您将创建一个绑定,该绑定将ViewModel上的属性与控件的属性绑定在一起。例如,您可以将MyProperty绑定到文本框,如下所示:
<TextBox Text="{Binding MyProperty}" />
由于UserControl.DataContext指定的父数据上下文是MainViewModel的实例,因此该绑定将绑定到该对象的属性。
答案 1 :(得分:0)
Well what you can do is set the MouseDown of a control such as a 'save' button on a method of the code-behind of your view. Then in the codebehind, you set your ViewModel's property or call his method.
在View.xaml.cs中,你需要这样的东西
private MyViewModele myVM;
public MyView()
{
InitializeComponent();
Loaded += new RoutedEventHandler(Initialized); //After loading, call Initialized(...)
}
private void Initialized(object sender, RoutedEventArgs e)
{
myVM= this.DataContext as MyViewModele ; //Reference to your ViewModel
}
private void Label_General(object sender, RoutedEventArgs e)
{
myVM.Property = "w/e"; //Set the ViewModel property
}
在View.xaml
中<Label
Content="Click this label"
MouseDown="Label_General"
>
</Label>
这里我将Property设置为静态字符串,但您可以检索View的任何控件并使用其值将其推送到ViewModel中。
我希望这能回答你的问题。
答案 2 :(得分:0)
我上面的psuedo代码实际上有效。我的ViewModel的构造函数有另一个问题让我难过。