Преобразование Gtk.NodeView в другой класс на C#

#c# #gtk #gtk#

#c# #gtk #gtk#

Вопрос:

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

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

Мой код на данный момент приведен ниже:

 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 следующим образом:

 object selection = (MasterLibrary)o;
  

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

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

Ответ №1:

Выбранный элемент 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 amp;amp; _i != null) {
    currentSongName.text = _m.GetValue (_i, 0); // assuming your song name is in column 0 of the NodeView.
  }
}
  

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