Как ссылаться на ObservableCollection из обработчика событий WPF ListView SelectionChanged? - PullRequest
1 голос
/ 08 января 2010

В приложении WPF у меня есть ListView, который связан с ObservableCollection ShQuCollection через привязку данных:

<ListView Name="ShSelList" ItemsSource="{Binding Source={StaticResource myDataSource},Path=ShQuCollection}" SelectionChanged="ShSelList_SelectionChanged">
   <ListView.View>
       <GridView>
         <GridViewColumn Header="Code" DisplayMemberBinding="{Binding StrCode}"/>
         <GridViewColumn Header="Date" DisplayMemberBinding="{Binding Date}"/>
         <GridViewColumn Header="Time" DisplayMemberBinding="{Binding Time}"/>
        </GridView>
   </ListView.View>
</ListView>

Внутри обработчика событий ListView SelectionChanged мне нужно вызвать метод и передать ему строковый параметр, взяв его из одного из полей выбранной строки ObservableCollection ShQuCollection.

Как я мог ссылаться на ObservableCollection из обработчика событий ListView SelectionChanged?

private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ...?????
    }

Отредактировано (добавлено):

Моя коллекция ObservableCollection находится в файле с выделенным кодом другого окна, и я использую объявление Window.Resources для ее достижения.

<Window.Resources>
    <c:ShWindow x:Key="myDataSource"/>
</Window.Resources>

И ObservableCollection выглядит так:

        ObservableCollection<ShsQu> _ShQuCollection =
            new ObservableCollection<ShsQu>();

    public ObservableCollection<ShsQu> ShQuCollection
    { get { return _ShQuCollection; } }

    public class ShsQu
    {
        public string StrCode { get; set; }
        public string Date { get; set; }
        public string Time { get; set; }
    }

Ответы [ 2 ]

1 голос
/ 08 января 2010

Я предполагаю, что ваш ModelView присоединен к вашему представлению. Значение ShQuCollection должно быть публичной собственностью в вашем ModelView . Вам просто нужно получить доступ к ObservableCollection через ваш ModelView .

Обновление:

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

private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   string s = ShQuCollection[ShSelList.SelectedIndex].StrCode;
}

Примечание: В будущем было бы чище использовать подход MVVM.

0 голосов
/ 08 января 2010

В вашем коде позади вы должны иметь возможность привести свойство выбранного элемента списка (SsSelList) к объекту ShsQu и получить доступ к свойствам этого объекта для вызова вашего метода.

ShSQu obj = SsSelList.SelectedItem  as ShSQu;
// Then call the method using the object properties
MethodToCall(obj.StrCode);

Это должно сработать, однако это не очень чистый способ сделать это, и я бы рекомендовал использовать шаблон MVVM. Если бы вы использовали MVVM, вы бы сохранили свою коллекцию в модели представления и отслеживали текущий элемент в модели представления. Таким образом, любая команда, которая вызывается в модели представления, может получить доступ к текущему элементу.

Джош Смит дает хорошее введение здесь (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx) в MVVM, если вы заинтересованы в дальнейшем чтении.

...