我正在學(xué)習(xí)棱鏡。幾個(gè)小時(shí)后我就遇到了一個(gè)問題,當(dāng)訂閱事件時(shí),訂閱方法沒有被調(diào)用。我正在使用Prism和Autofac。在下面的簡化示例中,在MainViewModel Publish("dupa");事件中調(diào)用了ctor. 然后在按鈕上單擊UpdateWindow打開。在窗口的后端創(chuàng)建了UpdateViewModel的實(shí)例。內(nèi)部更新 VM ctor已運(yùn)行,但在未執(zhí)行 UpdateName 之后Subscribe(UpdateName);,由于某種我不明白的原因。完整代碼:public class MainViewModel : ViewModelBase { private IEventAggregator _eventAggregator; public MainViewModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; //Prism _eventAggregator.GetEvent<UpdateNameEvent>().Publish("dupa"); OnOpenCommand = new DelegateCommand(OnOpenWin); } public void OnOpenWin(object obj) { UpdateWindow win = new UpdateWindow(); win.Show(); } public ICommand OnOpenCommand { get; private set; } }public class UpdateViewModel : ViewModelBase { private IEventAggregator _eventAggregator; public UpdateViewModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; //Prism _eventAggregator.GetEvent<UpdateNameEvent>().Subscribe(UpdateName); } private void UpdateName(string name) { this.Name = name; //is not called at all } private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChanged(); } } }public partial class UpdateWindow : Window { public UpdateWindow() { var bootStrapper = new BootStrapper(); var container = bootStrapper.BootStrap(); UpdateViewModel vm = container.Resolve<UpdateViewModel>(); InitializeComponent(); DataContext = vm; } }
1 回答
一只萌萌小番薯
TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
我不明白為什么這種依賴不起作用?
因?yàn)槟鶨ventAggregator為 .創(chuàng)建了一個(gè)新的UpdateViewModel。
var bootStrapper = new BootStrapper();
var container = bootStrapper.BootStrap();
UpdateViewModel vm = container.Resolve<UpdateViewModel>();
這看起來好像為 新建了一個(gè)容器UpdateWindow,而新容器將有一個(gè)新的——也就是不同的—— EventAggregator。當(dāng)然,這兩者不會(huì)相互發(fā)送事件。
所以解決方案是使用一個(gè)單一的容器來解決你所有的東西。這就是您使用 static 時(shí)發(fā)生的情況Utility。您應(yīng)該避免使用這樣的服務(wù)定位器。看一下ViewModelLocator,這使得為給定視圖創(chuàng)建視圖模型變得非常容易,例如,或者在創(chuàng)建容器時(shí)將容器傳遞給它UpdateWindow(雖然也有些丑陋)。
- 1 回答
- 0 關(guān)注
- 161 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
