Quiero tener objetos de diferentes tipos en la misma colección, pero no puedo resolver el problema.

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;}
}

Creo que esto se podría resolver a través de interfaces y genéricos, pero hasta ahora no he encontrado una solución que funcione. Al final, la colección de contenedores se vinculará a un ItemsSource de un ScatterView en WPF, que debería mostrar los contenedores individuales con sus diferentes contenidos.

2
Alex 15 dic. 2016 a las 16:25

2 respuestas

La mejor respuesta

Haz que implementen la misma interfaz:

public interface IContainer
{
    // common properties
}

public class Picture: IContainer
{
   // prop
}

public class Parameter: IContainer
{
   //prop
}

public class SetupStep
{
   public ObservableCollection<IContainer> Containers {get; set;}
}

Aquí cómo llenar su colección:

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);
5
mybirthname 15 dic. 2016 a las 13:35

También puede usar genérico para abordar el problema

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; }
}
0
Arash 15 dic. 2016 a las 13:51