Приведение Gtk.NodeView к другому классу в C # - PullRequest
0 голосов
/ 12 марта 2019

Я очень плохо знаком с Gtk # (меньше недели), так что, надеюсь, это не совсем неправильный вопрос:

У меня есть виджет NodeView в окне Gtk #.Это просто список песен.Когда я нажимаю на песню, я хотел бы обновить ярлык «Playing Playing:».

Мой код ниже:

protected void onSongSelected(object o, RowActivatedArgs args)
    {
        object selection = o;
        //something needs to go here
        currentSongName.Text = selection.ToString();
    }

Теперь я знаю, что это неправильно.Но то, что это дает мне, является типом объекта o (и, следовательно, переменной "selection"), которая является "Gtk.NodeView".Однако я не могу понять, что делать с NodeView, который позволит мне получить доступ к любой информации с выбранного узла.

Я попытался исправить свою проблему, следуя инструкциям на этой странице: https://www.mono -project.com / docs / gui / gtksharp / widgets / nodeview-tutorial /

Я создал класс TreeNode с именем MasterLibrary (почти идентичный примеру) и попытался привести o к типу MasterLibrary, напримерthis:

object selection = (MasterLibrary)o;

Однако это приводит к сбою моей программы, когда он говорит, что преобразование NodeView в класс MasterLibrary недопустимо.

Любая помощь по устранению этой проблемы будет принята с благодарностью.

1 Ответ

1 голос
/ 24 марта 2019

Выбранный элемент NodeView можно идентифицировать с помощью свойства Selection.Вам необходимо использовать TreeIter и TreeModel следующим образом:

Gtk.TreeIter _i;
Gtk.TreeModel _m;
if (myNodeView.Selection.CountSelectedRows () > 0) {
  myNodeView.Selection.GetSelected (out _m, out _i);
  if (_m != null && _i != null) {
    currentSongName.text = _m.GetValue (_i, 0); // assuming your song name is in column 0 of the NodeView.
  }
}

Обратите внимание, что лучше сначала проверить количество выбранных строк, чтобы избежать нуляссылочные исключения, но я делаю и это, и проверяю нулевое значение в модели и итерациях на основе защитного программирования.Если другой столбец (т. Е. Не столбец 0) содержит название вашей песни, просто измените номер столбца с 0 на другое.

...