0

最初に私の問題を説明し、次に質問します...

私は所有者、保護者、動物の 3 つのエンティティを持っています...動物は 1 つの所有者または 1 つの保護者を持つことができます。これまでのところ、とても良いです...

しかし、これを ListView でグループ化する場合、Owner.NameにPropertyGroupDescriptionを入力すると、動物の所有者として保護者がいる場合、ListView ではこのグループは空白になります。

私のエンティティ:

public partial class Animal : BaseModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual AnimalSpecie AnimalSpecie { get; set; }
    public virtual AnimalBreed AnimalBreed { get; set; }
    public DateTime DateBirth { get; set; }
    public Gender Gender { get; set; }
    public decimal Weight { get; set; }
    public bool Vaccinated { get; set; }
    public bool Castrated { get; set; }
    public virtual Owner Owner { get; set; }
    public virtual Protector Protector { get; set; }
    public DateTime InsertDate { get; set; }
    public DateTime UpdateDate { get; set; }

    public Animal()
    {
        this.Owner = new Owner();
        this.Protector = new Protector();
    }
}

public partial class BaseOwner : BaseModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string Phone { get; set; }
    public string FormatedPhone
    {
        get
        {
            if (this.Phone == null)
                return string.Empty;

            switch (this.Phone.Length)
            {
                case 11:
                    return Regex.Replace(this.Phone, @"(\d{2})(\d{4})(\d{4})", "($1) $2-$3");
                case 12:
                    return Regex.Replace(this.Phone, @"(\d{2})(\d{5})(\d{4})", "($1) $2-$3");
                default:
                    return this.Phone;
            }
        }
    }
    public string CellPhone { get; set; }
    public string FormatedCellPhone
    {
        get
        {
            if (this.CellPhone == null)
                return string.Empty;

            switch (this.CellPhone.Length)
            {
                case 11:
                    return Regex.Replace(this.Phone, @"(\d{2})(\d{4})(\d{4})", "($1) $2-$3");
                case 12:
                    return Regex.Replace(this.Phone, @"(\d{2})(\d{5})(\d{4})", "($1) $2-$3");
                default:
                    return this.CellPhone;
            }
        }
    }
    public string Email { get; set; }
    public virtual ICollection<Animal> Animals { get; set; }
}

Owner と Protectors は BaseOwner から派生します。

グループの説明で、所有者の名前または保護者の名前を表示するにはどうすればよいですか?

Ps .: まず、私の英語について申し訳ありません。明確でない場合は、再構成してみます。

Ps.2: MVVM を使用しています。

アップデート

私はここでいくつかの進歩を遂げました:

ListView ListViewAnimal = (ListView)this.AnimalView.FindName("ListViewAnimal");

            this._AnimalsOriginal = new Repository.Animal().GetAllCompleted();
            this.Animals = new Repository.Animal().GetAllCompleted();

            if (this.ListViewItems == null)
            {
                this.ListViewItems = new CollectionViewSource { Source = this.Animals };
            }

            foreach (var animal in this.Animals)
            {
                if (animal.Owner.Id > 0)
                {
                        this.ListViewItems.GroupDescriptions.Add(new PropertyGroupDescription("Owner.Name")); 
                }
                else
                {
                    this.ListViewItems.GroupDescriptions.Add(new PropertyGroupDescription("Protector.Name"));
                }                    
            }

            ListViewAnimal.ItemsSource = this.ListViewItems.View;

これは試行であり、最終的なコードではありませんが、1 つの項目に対して 2 つのグループ名を持つという奇妙な結果が得られます。

何かご意見は ?

4

1 に答える 1

2

問題を解決する簡単な方法は、クラスPropertyで a のみを使用して new を定義し、このプロパティをグループ化に使用することです。getterAnimal

以下に、のサンプル実装を示しましたgetter

public partial class Animal : Base Model
{
    public virtual Owner Owner { get; set; }
    public virtual Protector Protector { get; set; }

    public string ActiveCareTacker
    {
        get
        {
            if (Owner != null && string.IsNullOrEmpty(Owner.Name) == false)
                return Owner.Name;

            if (Protector != null && string.IsNullOrEmpty(Protector.Name) == false)
                return Protector.Name;

            return "No Owner/Protector";
        }
    }
}
于 2013-09-13T06:26:25.290 に答える