Установить свойство на ViewModel из View - PullRequest
0 голосов
/ 09 июня 2011

Что мне нужно добавить, чтобы установить открытое свойство в моем экземпляре ViewModel из моего View?Я хотел бы установить некоторые свойства для ресурса ViewModel, а не связывать его с каким-либо элементом в моем представлении.

View 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 никогда не вызывается.Должна быть какая-то фундаментальная вещь MVVM, которую я делаю неправильно.

Ответы [ 3 ]

0 голосов
/ 10 июня 2011
    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>

Здесь я установил свойство в статическую строкуно вы можете восстановить любой элемент управления вашего View и использовать его значение для добавления его в вашу ViewModel.

Я надеюсь, что это ответ на ваш вопрос.

0 голосов
/ 15 июня 2011

Мой код psuedo выше действительно работает. У меня была другая проблема с конструктором моего ViewModel, которая поставила меня в тупик.

0 голосов
/ 09 июня 2011

Обычно вы создаете привязку, которая связывает свойство в ViewModel со свойством элемента управления. Например, вы можете привязать MyProperty к текстовому полю следующим образом:

<TextBox Text="{Binding MyProperty}" />

Поскольку родительский контекст данных, указанный UserControl.DataContext, является экземпляром MainViewModel, эта привязка будет привязана к свойству этого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...