从View查看ViewModel上的属性

时间:2011-06-08 23:02:29

标签: silverlight mvvm

在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我做错了。

3 个答案:

答案 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的构造函数有另一个问题让我难过。