![](/img/trans.png)
[英]Translate DataGrid MouseEvent so I do not have code in View's Code-Behind
[英]Why can't I call a method in my View's code-behind from the view's presenter?
這是我觀點的代碼背后 :
using System.Windows.Controls;
namespace TestBoundTabControl.Views
{
public partial class SmartFormView : UserControl
{
public SmartFormView()
{
InitializeComponent();
}
public void BeforeLoad()
{
MainTabControl.SelectedIndex = MainTabControl.Items.Count - 1;
}
}
}
但是,為什么不能從視圖的演示者訪問方法“ BeforeLoad()”?
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using TestBoundTabControl.Views;
namespace TestBoundTabControl.Presenters
{
public class SmartFormPresenter : PresenterBase
{
#region ViewModelProperty: SmartFormAreaPresenters
private ObservableCollection<SmartFormAreaPresenter> _smartFormAreaPresenters = new ObservableCollection<SmartFormAreaPresenter>();
public ObservableCollection<SmartFormAreaPresenter> SmartFormAreaPresenters
{
get
{
return _smartFormAreaPresenters;
}
set
{
_smartFormAreaPresenters = value;
OnPropertyChanged("SmartFormAreaPresenters");
}
}
#endregion
public SmartFormPresenter()
{
View = new SmartFormView();
View.DataContext = this;
for (int i = 0; i < 5; i++)
{
SmartFormAreaPresenters.Add(new SmartFormAreaPresenter());
}
View.BeforeLoad(); //method not found
}
}
}
我的猜測是,屬性View
類型為UserControl
而不是SmartFormView
。 如果是這樣,則必須強制轉換(或更改其類型):
((SmartFormView) View).BeforeLoad();
視圖顯然是某種基本類型,例如FrameworkElement。 試試這個代碼:
SmartFormView myView = new SmartFormView();
View = myView;
myView.BeforeLoad();
您沒有顯示PresenterBase類,但是PresenterBase.View屬性可能不是SmartFormView類型。 我不確定它是什么類型,但是我猜是UserControl或其祖先之一。
以下是一些選項:
使您的基類對視圖類型通用,以便在SmartFormPresenter中,View屬性實際上可以是SmartFormView類型。 例如:
public class PresenterBase<T> { ... public T View { get; set; } ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.