SelectedItem в ListView

258
21 января 2017, 09:37

Добрый день, есть коллекция которая заполняется из базы MySQL:

while (contains_result.Read())
{
    ItemsForContains.Add(
    new Contains()
    {
        CId = contains_result["id"].ToString(),
        ProfId = contains_result["profId"].ToString()
    });
}

Класс со свойствами:

public class Contains : INotifyPropertyChanged
{
    private string _cid;
    private string _groupid;
    public string CId
    {
        get { return _cid; }
        set { if (_cid != value) { _cid = value; RaisePropertyChanged(); } }
    }
    public string GroupId
    {
        get { return _groupid; }
        set { if (_groupid != value) { _groupid = value; RaisePropertyChanged(); } }
    }
    protected void RaisePropertyChanged([CallerMemberName] string propertyName = null) =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    public event PropertyChangedEventHandler PropertyChanged;
}

Все это дело привязано к ListView (ItemsSource). Я пытаюсь сделать что-бы при клике по одной из строк ListView мне к примеру выдавало MessageBox с данными именно той строки, на которую кликнул. Делаю вот так: Привязка к SelectedItem в ListView:

SelectedItem="{Binding SelectedItemsContains}"

SelectedItemsContains:

private Contains _SelectedItemsContains;
public Contains SelectedItemsContains
{
    get { return _SelectedItemsContains; }
    set
    {
        _SelectedItemsContains = value; RaisePropertyChanged();
    }
}
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null) =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    public event PropertyChangedEventHandler PropertyChanged;

Ну и само событие на клик:

private void editProf_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    MessageBox.Show(SelectedItemsContains.CId);
}

Выводит "Ссылка на объект не указывает на экземпляр объекта.", а если добавляю в метод editProf_MouseLeftButtonUp строку SelectedItemsContains = new Contains(); ошибка пропадает, но выводит просто пустой MessageBox

Answer 1

Дело в том, что первый клик лишь только выделяет элемент, а вот второй клик по этому же элементу должен выдавать информацию. Поэтому нужно проверять на null, а потом уж выводить.

private void editProf_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (SelectedItemsContains != null)
    MessageBox.Show(SelectedItemsContains.CId);
}
READ ALSO
Форма блокируется потоком

Форма блокируется потоком

C# WinFormThread запускается и работает, но блокирует все элементы формы

353
Поиск элемента в файле

Поиск элемента в файле

Есть txt - файл вида: [Володя_Синяк #1 Охранник 5 лет], в котором #1 это номер отделаЗадача заключается в том, чтобы при вводе нужного отдела сортировало...

285
Microsoft.ProjectOxford.Face

Microsoft.ProjectOxford.Face

Можно ли как-то получить рисунок по PersistedFacesID?

306