Я пытаюсь узнать о "прикрепленном поведении" и столкнулся с небольшой проблемой.В настоящее время я использую статью: 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" />
Или то, что я мог бы рассмотреть в порядкепродолжать.Я застрял ...
Спасибо