Найдено решение:
MainViewModel
public class MainViewModel : ViewModelBase
{
public StudentViewModel StudentViewModel { get; set; }
public MainViewModel()
{
StudentViewModel = new StudentViewModel();
}
}
MainView
<ComboBox
DataContext="{Binding StudentViewModel}"
ItemsSource="{Binding Path=Students, UpdateSourceTrigger=PropertyChanged}"
/>
StudentViewModel [ 119]
private ObservableCollection<Student> _students;
public ObservableCollection<Student> Students
{
get => _students;
set
{
if (_students == value) return;
_students = value;
RaisePropertyChanged("Students");
}
}
Да, вам нужно использовать __ repr __
. Быстрый пример его поведения:
>>> class Foo:
... def __str__(self):
... return '__str__'
... def __repr__(self):
... return '__repr__'
...
>>> bar = Foo()
>>> bar
__repr__
>>> print bar
__str__
>>> repr(bar)
'__repr__'
>>> str(bar)
'__str__'
Однако, если вы не определите __ str __
, он вернется к __ repr __
, хотя это не рекомендуется:
>>> class Foo:
... def __repr__(self):
... return '__repr__'
...
>>> bar = Foo()
>>> bar
__repr__
>>> print bar
__repr__
Все все рассмотрено, как рекомендует руководство, __ repr __
используется для отладки и должен возвращать что-то repr
, представляющее объект.
Just a little enhancement avoiding the + for concatenating:
def __str__(self):
return '[%s] -> [%s]' % (self.sid, self.seq)