Visual FoxPro を 20 年近く使用して以来、強い型言語に悩まされています。:)。
プロパティを設定するために、1 つのインターフェイスを使用してジェネリック メソッドを作成しようとしていDataGrid.ItemsSource
ます。
どうぞ...
まず、クラス (POCO) があります。
public class PersonVO
{
public int PersonID { get; set; }
public string Name { get; set; }
}
次に、インターフェイスを作成しました。
public interface IBussiness
{
List<T> GetAll<T>();
}
そして、このインターフェースを実装する他のクラス...
public class PersonBLL : IBussiness
{
public List<PersonVO> CreateNewList()
{
List<PersonVO> list = new List<PersonVO>();
list.Add(new PersonVO() { PersonID = 1, Name = "Robert" });
list.Add(new PersonVO() { PersonID = 2, Name = "Julie" });
list.Add(new PersonVO() { PersonID = 3, Name = "Bernard" });
return list;
}
public List<T> GetAll<T>()
{
return CreateNewList();
}
}
ステートメントreturn CreateNewList()
にエラーが表示されます。
C#: タイプ 'System.Collections.Generic.List' のインスタンスは、タイプ 'System.Collections.Generic.List' のメソッドによって返すことはできません
そこで、この方法を次のように変更しました。
public List<T> GetAll<T>()
{
return CreateNewList() as List<T>;
}
コンパイルされます!
さて、私の問題が始まります... WPF usercontrol がありMyTabItemList
ます。
私のポイントは、実行時に新しい WPF TabItem を作成し、BLL クラスを挿入することです (この例PersonBLL
では、実際にはたくさんあります...)。
MyTabItemList myTabItem = new MyTabItemList(new PersonBLL());
MyTabItemList は次のようなものです。
public partial class MyTabItemList : TabItem
{
IBussiness oBLL;
public MyTabItemList(IBussiness oBLL)
{
InitializeComponent();
this.oBLL = oBLL;
MyGrid.ItemsSource = oBLL.GetAll<object>();
}
}
正常に動作しますが、希望どおりに動作しません。
oBLL.GetAll<object>()
常に戻りますnull
。
(以下のように)に変更<object>
する<PersonBLL>
と機能しますが、この場合はクラスMyTabItemList
でのみ機能しPersonBLL
ます:
MyGrid.ItemsSource = oBLL.GetAll<PersonBLL>();
機能させるにはどうすればよいですか?