Załóżmy, że mam ListBox, który jest powiązany z kolekcją Foo
obiekty i wybrane Foo
jest wyświetlany w kontrolce treści, a szablon treści to FooView
.
Czy istnieje sposób, że mogę to zrobić, aby FooView
przechodzi wybrane Foo
do konstruktora FooViewModel
czyli jest to telegazeta za pośrednictwem ViewModelLocator
?
Odpowiedzi:
3 dla odpowiedzi № 1MainViewModel
/*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;}
Główny widok
<ListBox ItemsSource={Binding Foos}
SelectedItem={Binding SelectedFoo}>...
<FooView... bind to CurrentFooVM...
1 dla odpowiedzi nr 2
Słyszałem, że chociaż oprzyrządowanie w VisualStudio nie obsługuje tego, specyfikacja XML pozwala na zaimplementowanie klasy za pomocą parametru w konstruktorze. Nigdy tego nie robiłem, ale słyszałem, że było to możliwe na podcastu .Net Rocks. Może dotyczyć tylko WPF w przeciwieństwie do Silverlight, ponieważ WPF ma więcej funkcji niż Silverlight. Niewiele pomocy, ale może dać ci dostęp do właściwa ścieżka.