Команда Invoke в пользовательском элементе управления - PullRequest
0 голосов
/ 11 февраля 2011

Я новичок в WPF и пытаюсь изучить известный паттерн MVVM. У меня возникает небольшая проблема (я уверен), когда я пытаюсь привязать простую команду к какой-либо модели ViewModel

это простой UserControl, который я создал:

<UserControl x:Class="MVVM_UsingUserControl_Sample.View.MyUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             > 
         <StackPanel  DataContext="MyUserControlViewModel" Orientation="Vertical" >

        <Button Margin="0,100,0,0" Height="50" Width="50" Content="PressMe"  Command="{Binding Path=MyCommand}"/>

    </StackPanel>

</UserControl>

и это ViewModel пользовательского управления

class MyUserControlViewModel : ViewModelBase 
{
        CommandBase m_MyCommand = null;


        public MyUserControlViewModel()
        {

        }

        public ICommand MyCommand
        {
            get
            {
                if (m_MyCommand == null)
                {
                    m_MyCommand = new CommandBase(new Action<object>(DoSomething),
                                                  new Predicate<object>(CanDoSomething));
                }

                return m_MyCommand;
            }
        }

        public void DoSomething(object i_Params)
        {
            MessageBox.Show("Inside MyUserControl DoSomething"); 
        }

        public bool CanDoSomething(object i_Params)
        {
            return true;
        }
}

это главное окно xaml (без кода)

Теперь проблема в том, что мое главное окно содержит userControl как есть (внутри панели стека) и ничего больше.Я ожидаю, что команда «MyCommad» будет вызываться, когда я нажимаю кнопку «MyButton», но это не так.

У кого-нибудь есть идеи, почему ???Большое спасибо.

1 Ответ

2 голосов
/ 11 февраля 2011

В конструкторе вашего главного окна установите его DataContext для вашей ViewModel.

Например,

this.DataContext = new MyViewModel();

В вашем XAML удалите

DataContext="MyUserControlViewModel"

, поскольку DataContext будет наследоваться от главного окна.

Тогда все должно работать так, как вы ожидаете.

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