Как решить отношение HasMany в MVVM, чтобы отображаться в одной строке в сетке данных - PullRequest
0 голосов
/ 25 августа 2010

У меня есть класс Auswahl с некоторыми простыми свойствами и свойством RefFilters типа

List<RefAuswahlFilter>

Чего я хочу достичь: Показать все свойства Auswahl в сетке данных со всеми элементами RefFilter в ОДНОЙ строке.Проблема в том, что количество RefFilter отличается от auswahl для auswahl объекта.В прошлом я использую данные в качестве источника коллекции.там я просто добавил количество MAX reffilters в виде столбцов.

Теперь я хочу достичь этого без данных, с чем-то вроде «динамических» свойств или чего-то еще.

public class Auswahl
{
    public Auswahl()
    {
        this.RefFilters = new List<RefAuswahlFilter>();
    }

    public virtual string Beschreibung {get; set; }
    public virtual long Id { get; set; }
    public virtual string Programm { get; set; }
    public virtual string Returnkey { get; set; }
    public virtual string Variante { get; set; }

    //RefFilters contains a Rank and a Filter Property
    public virtual IList<RefAuswahlFilter> RefFilters { get; set; }


 public class AuswahlVM
 {
    ...
    public ObservableCollection<Auswahl> Auswahlliste { get; private set; }

    public void FillList()
    {

            try
            {
                var l = session.CreateCriteria(typeof(Auswahl)).List<Auswahl>().Where(x =>!String.IsNullOrEmpty(x.Returnkey));
                this.Auswahlliste = new ObservableCollection<Auswahl>(l);
            }
            catch (Exception ex)
            {

            }

    }

1 Ответ

0 голосов
/ 25 августа 2010

Я закончил тем, что создал вспомогательный класс с индексатором и отобразил свой исходный список в этом вспомогательном классе

public class RefAuswahlFilterListe
{
    private IList<RefAuswahlFilter> refFilters;
    private Auswahl auswahl;
    public RefAuswahlFilterListe(Auswahl refauswahl, IList<RefAuswahlFilter> filter)
    {
        this.refFilters = filter;
        this.auswahl = refauswahl;
    }

    public string this[string rank]
    {
        get
        {
            long index;
            if(Int64.TryParse(rank, out index))
            {
                var result = this.refFilters.FirstOrDefault(x => x.Filterrank == index);
                return result != null ? result.Filter : String.Empty;
            }
            return String.Empty;
        }
        set
        {
            long index;
            if (Int64.TryParse(rank, out index))
            {
                var result = this.refFilters.FirstOrDefault(x => x.Filterrank == index);

                if(result == null)
                    this.refFilters.Add(new RefAuswahlFilter(){Auswahl = auswahl,Filter = value, Filterrank = index});
                else
                    result.Filter = value;
            }

        }
    }

}

<DataGridTextColumn Header="Filter1" 
                    ToolTipService.ToolTip="Filter Spalte"
                    Binding="{Binding Path=Filter[1]}">
</DataGridTextColumn>
<DataGridTextColumn Header="Filter2" 
                    ToolTipService.ToolTip="Filter Spalte"
                    Binding="{Binding Path=Filter[2]}"/>

Я действительно не знаю, так ли это.и у меня все еще есть проблема для создания динамического wpf DataGridTextColumns (может быть, в коде позади?), потому что это должно быть как минимум столько же столбцов, сколько наибольшее количество RefFilters.

...