我下面有具体的课程和内容,
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},
};
}
}
并且使用autofac进行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();
,则可以使用。如何使用用户界面?
谢谢!
public IMyViewModel ViewModel
{
get
{
return _viewModel;
}
set
{
DataContext = value;
_viewModel = value;
}
}
您需要使用容器中的值实际分配ViewModel
:
var builder = new ContainerBuilder();
builder.RegisterType<MyViewModel>().As<IMyViewModel>();
// This is your container, here you can get your instances from!
Container = builder.Build();
// Create the scope, resolve your interface,
// use it, then dispose of the scope.
using (var scope = Container.BeginLifetimeScope())
{
// get the vm from the container, assign it as datacontext.
DataContext = scope.Resolve<IMyViewModel >();
}