假设我有一个ListBox绑定到Foo
个对象的集合,并且选定的Foo
显示在contentcontrol中,内容模板为FooView
。
有没有办法可以让FooView
通过Foo
将FooViewModel
传递给ViewModelLocator
的构造函数,即{{1}}的datacontext?
答案 0 :(得分:3)
MainViewModel
/*INotifyPropertChanged property*/
public FooViewModel CurrentFooVM{
get{/*INPC code*/}
private set{/*INPC code*/}
}
/*INotifyPropertChanged property*/
public Foo SelectedFoo{
get{/*INPC code*/}
set{/*INPC code*/ CurrentFooVM = new FooViewModel(_selectedFoo)}
}
public ObservableCollection<Foo> Foos {get; private set;}
的MainView
<ListBox ItemsSource={Binding Foos}
SelectedItem={Binding SelectedFoo}>...
<FooView... bind to CurrentFooVM...
答案 1 :(得分:1)
我听说虽然Visual Studio中的工具不支持它,但XML规范允许您在构造函数中使用参数实例化类。我从来没有这样做过,但是听说这可以在.Net Rocks播客上播出。也可能只与WPF相关而不是Silverlight,因为WPF具有比Silverlight更多的功能。没什么帮助,但可能会让你走上正轨。