Привязанность поведения к работе - PullRequest
0 голосов
/ 23 марта 2012

Я пытаюсь узнать о "прикрепленном поведении" и столкнулся с небольшой проблемой.В настоящее время я использую статью: http://marlongrech.wordpress.com/2008/12/13/attachedcommandbehavior-v2-aka-acb/

В двух словах, я хотел бы иметь возможность "щелкнуть" по записи в TreeView, и это вызвать файл в Блокноте.У меня есть этот код, чтобы вызвать файл в блокноте, работающий через командную кнопку в WPF.А пока давайте назовем эту командную кнопку ... Тестирование.Вот XAML, который я использую для привязки этой кнопки к представлению.

<TreeView ItemsSource="{Binding Courses}">
  <TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
      <Setter Property="local:CommandBehavior.Event" Value="MouseDoubleClick"/>
      <Setter Property="local:CommandBehavior.Action" Value="{Binding Path=TestIng}"/>
      <Setter Property="local:CommandBehavior.CommandParameter" Value="ShowThis" />
    </Style>
  </TreeView.ItemContainerStyle>
</TreeView>

Когда я дважды щелкаю на записи в TreeView, он действительно выполняет код: «TestIng», но он бомбардируетследующая строка:

policy.Execute (CommandParameter)

Фактическая ошибка:

Ссылка на объект не установлена ​​для экземпляра объекта

, поэтомуэто говорит мне о том, что, возможно, я неправильно настроил «CommandParameter».

Вот модель с определением кнопки «TestIng».

using System.Collections.ObjectModel;
using System.Linq;
using BusinessLib;
using System.Windows.Input;
using System.Windows;
using System;
using System.Collections.Generic;

namespace TreeViewWithViewModelDemo.LoadOnDemand
{
    public class PublicationsViewModel
    {
        readonly ReadOnlyCollection<CourseViewModel> _courses;
        readonly ICommand _searchCommand;

        public PublicationsViewModel(Course[] courses)
        {
            _courses = new ReadOnlyCollection<CourseViewModel>(
                (from course in courses
                 select new CourseViewModel(course))
                .ToList());
            _searchCommand = new TestIng(this);
        }

        public ReadOnlyCollection<CourseViewModel> Courses
        {
            get { return _courses; }
        }

        public ICommand SearchCommand
        {
            get { return _searchCommand; }
        }
    }

    class TestIng : ICommand
    {
        public TestIng(PublicationsViewModel param1)
        {
        }

        public bool CanExecute(object parameter)
        {
            return true;
        }

        event EventHandler ICommand.CanExecuteChanged
        {
            add { }
            remove { }
        }

        public void Execute(object parameter)
        {
            MessageBox.Show("Into This Here");
        }

        public void ShowThis()
        {
            MessageBox.Show("Into This Here Number2");
        }
    }
}

Я знаю, что этоВероятно, не из-за того, что вы дадите мне точный ответ, учитывая тот факт, что я даю вам только часть кода, но мне интересно, не возражаете ли вы дать мне некоторые идеи о том, как действовать и что я мог бы попробоватьдалее.

Я думаю, что ошибка в том, как я определяю CommandParameter в XAML.Я действительно не уверен, понимаю ли я, как это работает, но я думаю, что это метод в классе, который вы хотите выполнить при нажатии MouseDoubleClick.У меня есть два метода во ViewModel:

        public void Execute(object parameter)
        public void ShowThis()

, которые я использую для простого тестирования ... но эти строки messagebox.show не выполняются.Как я уже сказал, я получаю сообщение об ошибке ...

Может ли кто-нибудь дать мне некоторое представление о том, как я должен определить:

      <Setter Property="local:CommandBehavior.CommandParameter" Value="ShowThis" />

Или то, что я мог бы рассмотреть в порядкепродолжать.Я застрял ...

Спасибо

1 Ответ

0 голосов
/ 23 марта 2012

Измените привязку команды, указав SearchCommand вместо TestIng

В вашем примере кода TestIng отображается как класс, а не как свойство, и вам необходимо связать со свойством

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