我可以将类型参数传递给*.xaml.cs类吗?
本文关键字:xaml cs 类吗 类型 参数传递 我可以 | 更新日期: 2023-09-27 18:10:27
我想传递一个类型参数到我的*.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;
}
}
不幸的是,这两个选项在XAML
这是另一个选项。我已经让这个工作,但它确实是丑陋的代码。我使用一个简单的object
变量来保存泛型列表。我使用具有约束类型参数的方法来确保我正在使用IFilterableType
接口。我也检查类型在我的DisplayList
方法,以确保我使用IFilterableType
的正确实现。
如果我使用FilterB而不是FilterA调用this.DisplayList
,我将得到一个异常。这是我能想到的最好的解决办法。
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();
}
}