Команда вызова Silverlight от кнопки в шаблоне элемента списка - PullRequest
1 голос
/ 01 июня 2011

Я видел, как этот вопрос задавали несколько раз, но я не видел, чтобы найти полный ответ на мой сценарий.

В моем проекте у меня есть пользовательский элемент управления, который я создал как элемент списка. В этом пользовательском контроле у ​​меня есть кнопка

            <Button x:Name="DetailButton"
                Grid.Column="1"
                Width="107"
                Height="23"
                Margin="196,94,0,0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Click="MoreDetail_Click"
                Command="{Binding GetCFSDetailCommand}"
                Content="View Details [+]" />

кнопка имеет событие щелчка, характерное для представления, которое в основном расширяет или сворачивает строку сетки в зависимости от состояния видимости. Я использовал событие здесь, поскольку оно было специфичным для пользовательского интерфейса. Эта кнопка также имеет команду, которая вызывается в виртуальной машине.

ВМ код

public class SearchViewModel : INotifyPropertyChanged
{
    private DelegateCommand _getCFSDetailCommand;
public DelegateCommand GetCFSDetailCommand
    {
        get
        {
            if (this._getCFSDetailCommand == null)
                this._getCFSDetailCommand = new DelegateCommand(GetCFSDetailCommandExecute, CanGetCFSDetailCommandExecute);

            return this._getCFSDetailCommand;      
        }

    }
private void GetCFSDetailCommandExecute(object parameter)
    {
        //bind collection to model call here
    }

Проблема, с которой я столкнулся, заключается в том, что команда на кнопке «потеряна» или никогда не вызывается, когда внутри элемента списка у меня есть представление, привязанное к виртуальной машине, и если я помещаю эту команду на любую другую кнопку в представлении, команда является называется. Может ли кто-нибудь помочь мне понять, как вызвать команду, привязанную к кнопке в элементе списка?

Заранее спасибо

Ответы [ 2 ]

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

randyc, в своем первоначальном (первом) посте вы связывали CommandParameter с локальным контекстом данных элемента списка.Во втором посте вы пропустите эту привязку, и я думаю, что это невозможно в контексте второго порта.В вашем случае я предлагаю использовать привязку элемента к элементу для привязки к команде GetCFSDetailCommand из родительского контекста данных.

1 голос
/ 01 июня 2011

Проблема при вызове команды в usercontrol как элемента списка состоит в том, что шаблон ищет команду в контексте элемента управления. Видимо, элемент списка выходит за пределы визуального дерева, поэтому привязка не наследуется.
Чтобы исправить это, мне нужно было явно установить контекст данных кнопки на ViewModel. В конечном итоге это было решено с помощью привязки Элемент к элементу, что позволило мне указать текст данных пользовательского элемента управления на основное представление, которое его содержало.

Надеюсь, это поможет

...