У меня ниже конкретного класса и помехи,
public interface IMyViewModel
{
ObservableCollection<Person> People { get; set; }
}
public class MyViewModel : INotifyPropertyChanged, IMyViewModel
{
private ObservableCollection<Person> _people;
public ObservableCollection<Person> People
{
get => _people;
set
{
if (value == _people)
return;
_people = value;
OnPropertyChanged();
}
}
public MyViewModel()
{
_people = new ObservableCollection<Person>
{
new Person() {Id = 1, Name = "Bob", Age = 45},
};
}
}
и использование autofa c для DI,
builder.RegisterType<MyViewModel>().As<IMyViewModel>();
Теперь в моем файле xaml я пытаюсь связать просмотр списка ,
<ListView ItemsSource="{Binding People, Mode=OneWay}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" Width="100"/>
<GridViewColumn Header="Age">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Age}" Width="100"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
В коде xaml я хочу использовать интерфейс, а не конкретный класс модели представления, как это использовать?
Если я использую DataContext = _viewModel;
, то это не работает, и нет запись привязывается к списку просмотра.
public partial class NetworkConfiguration : Window
{
private IMyViewModel _viewModel;
public NetworkConfiguration()
{
InitializeComponent();
//DataContext = new MyViewModel();
DataContext = _viewModel;
}
public IMyViewModel ViewModel
{
get
{
return _viewModel;
}
set
{
DataContext = value;
_viewModel = value;
}
}
}
Примечание. Если я использую DataContext = new MyViewModel();
, то это работает. как пользовательский интерфейс?
Спасибо!