0

*.xaml.cs ファイルに型パラメーターを渡したいです。C# コードは次のようになります。

public partial class Filter<T> : Window where T : IFilterableType
{
    private readonly IEnumerable<T> _rows;
    public Filter(IEnumerable<T> rows)
    {
        this._rows = rows;
    }
}

これは部分クラスであり、Visual Studio がクラスの他の部分を生成するため、Visual Studio が<T>部分クラスの他の部分を再生成すると、型パラメーターが削除されるのではないかと心配しています。これまでのテストでは、これは発生していませんが、確認したいと思います。

このように *.xaml.cs ファイルに型引数を渡すことはできますか?

そうでない場合、*.xaml.cs クラスがジェネリック型のプライベート リストを持つ他の方法はありますか? 以下のようなものを試してみますが、もちろんコンパイルできません。

public partial class Filter : Window
{
    private IEnumerable<T> _rows;
    public Filter() { }

    public void LoadList(IEnumerable<T> rows) where T : IFilterableType
    {
        this._rows = rows;
    }
}
4

2 に答える 2

0

別のオプションがあります。私はこれを機能させましたが、確かに醜いコードです。単純なobject変数を使用してジェネリック リストを保持します。インターフェイスを使用していることを確認するために、制約付きの型パラメーターを持つメソッドを使用しIFilterableTypeます。また、メソッドの型をチェックDisplayListして、 の正しい実装を使用していることを確認しますIFilterableType

this.DisplayListFilterA の代わりに FilterB を使用して呼び出すと、例外が発生します。これが私が思いつく最善の解決策です。

public partial class Filter : Window
{
    public Filter()
    {
        List<FilterA> listA = new List<FilterA>();
        this.SetList<FilterA>(listA);
        this.DisplayList<FilterA>();
    }

    public interface IFilterableType { string Name { get; } }
    public class FilterA : IFilterableType { public string Name { get { return "A"; } } }
    public class FilterB : IFilterableType { public string Name { get { return "B"; } } }


    private object _myList;
    private Type _type;

    public void SetList<T>(List<T> list) where T : IFilterableType
    {
        this._myList = list;
        this._type = typeof(T);
    }

    public void DisplayList<T>() where T : IFilterableType
    {
        if (this._myList is List<T>)
            this.DataContext = (List<T>)this._myList;
        else
            throw new ArgumentException();
    }
}
于 2013-04-23T19:29:02.100 に答える
0

残念ながら、要求されたオプションはどちらも XAML では使用できません

于 2013-04-23T18:43:45.163 に答える