我想在同一个集合中保存不同类型的对象,但无法解决问题。
public class SetupStep
{
public ObservableCollection</*Picture- or ParameterContaienr*/> Containers {get; set;}
}
public class PictureContainer
{
public ObservableCollection<Picture> Content {get; set;}
}
public class ParameterContainer
{
public ObservableCollection<Parameter> Content {get; set;}
}
我认为这可以通过接口和泛型来解决,但到目前为止我还没有找到一个可行的解决方案。
最后,容器集合将绑定到WPF中ScatterView
的ItemsSource,它应显示具有不同内容的各个容器。
答案 0 :(得分:4)
让它们实现相同的界面:
public interface IContainer
{
// common properties
}
public class Picture: IContainer
{
// prop
}
public class Parameter: IContainer
{
//prop
}
public class SetupStep
{
public ObservableCollection<IContainer> Containers {get; set;}
}
此处如何填写您的收藏:
SetupStep step = new SetupStep();
step.Containers = new ObservableCollection<IContainer>();
Parameter p = new Parameter();
Picture pic = new Picture();
step.Containers.Add(p);
step.Containers.Add(pic);
答案 1 :(得分:0)
您也可以使用通用来解决问题
public interface BaseContainer
{
// common properties
}
public class Picture : BaseContainer
{
}
public class Parameter : BaseContainer
{
}
interface SetupStep<T> where T:BaseContainer
{
ObservableCollection<T> Containers { get; set; }
}
public class PictureContainer:SetupStep<Picture>
{
public ObservableCollection<Picture> Containers { get; set; }
}
public class ParameterContainer : SetupStep<Parameter>
{
public ObservableCollection<Parameter> Containers { get; set; }
}