locked
MVVM ListView SelectedItem detection RRS feed

  • Вопрос

  • Здравствуйте,

    Пытаюсь писать приложение, используя шаблон MVVM. Наткнулся на такую проблему

    есть View'шка с ListView

    <ListView Grid.Row="1"
                          ItemsSource="{Binding Path = Departments}"
                          ItemTemplate="{StaticResource DepartmenItemTemplate}" 
                          SelectedItem="{Binding SelectedDepartment}">
                    <ListView.ItemContainerTransitions>
                        <TransitionCollection>
                            <EntranceThemeTransition/>
                        </TransitionCollection>
                    </ListView.ItemContainerTransitions>
                </ListView>

    есть ViewModel

    public class MainViewModel

    {

    /// <summary> /// Коллекция кафедр /// </summary> public ObservableCollection<Department> Departments { get; set; } private Department _selectedDepartment; /// <summary> /// Выбранныя кафедра /// </summary> public Department SelectedDepartment { get { return _selectedDepartment;} set { if (_selectedDepartment == value) return; _selectedDepartment = value; RaisePropertyChanged(); // Код вызывающийся при выборе Кафедры DepartmentSelected(_selectedDepartment); } }

    public MainViewModel()
            {
                _dbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "dataBase.db"); // Путь БД
                //ApplicationData.Current.LocalSettings.Values.Remove("firstStart");
                InitializeDataBase();
                using (var db = new SQLiteConnection(_dbPath))
                {
                    // Запросы к БД
                    // Получаем список кафедр
                    Departments = new ObservableCollection<Department>(db.Table<Department>());
                    SelectedDepartment = Departments[0];
                }
            }

    }

    Хочу, чтобы ViewModel подставляла нужные данные в некие объекты, когда в ListView'шке пользователь тыкает какой-то элемент.

    Я уже пытался это реализовать байндингами свойства SelectedItem к объекту, но безуспешно как-то

    Прошу вашей помощи. Заранее благодарен


    • Изменено evgeniy.polonskiy 15 ноября 2013 г. 12:46 редактировал класс
    15 ноября 2013 г. 12:36

Ответы

  • Здравствуйте.

    1. Где Вы задаете DataContext для страницы?

    2. Укажите в SelectedItem="{Binding SelectedDepartment}"> Mode=TwoWay.

    3. Я рекомендую Вам создать в LayoutAwarePage 2 команды - OnNavigateToCommand и OnNavigateFromCommand и инвокать их по соответствующим событиям. Это сделает работу с данными гибче и удобней, т.к. Вы в VM всегда будете знать когда страница уже загружена и когда идет из неё выход. Так же, в этих методах можно использовать await, в отличии от конструктора.

    • Помечено в качестве ответа evgeniy.polonskiy 15 ноября 2013 г. 19:58
    15 ноября 2013 г. 13:37

Все ответы

  • Здравствуйте.

    1. Где Вы задаете DataContext для страницы?

    2. Укажите в SelectedItem="{Binding SelectedDepartment}"> Mode=TwoWay.

    3. Я рекомендую Вам создать в LayoutAwarePage 2 команды - OnNavigateToCommand и OnNavigateFromCommand и инвокать их по соответствующим событиям. Это сделает работу с данными гибче и удобней, т.к. Вы в VM всегда будете знать когда страница уже загружена и когда идет из неё выход. Так же, в этих методах можно использовать await, в отличии от конструктора.

    • Помечено в качестве ответа evgeniy.polonskiy 15 ноября 2013 г. 19:58
    15 ноября 2013 г. 13:37
  • Спасибо большое. Mode = TwoWay сработало

    Data Context указываю в контексте страницы, как вы меня учили

    <Page.DataContext>
            <Binding Source="{StaticResource MainViewModel}" />
        </Page.DataContext

    А вот про LayoutAwarePage не очень понял, что это

    15 ноября 2013 г. 15:34