XAML自定义GridViewColumn数据

时间:2017-04-02 11:17:33

标签: c# wpf xaml

我正在尝试创建一个显示'字符列表的应用程序。睡眠,饥饿,无聊和健康属性。我想显示当前角色及其状态(状态取决于哪个值最大(睡眠,饥饿和无聊))。由于status不是角色类中的属性,因此我无法像使用名称和健康一样执行此操作:

 <ListView x:Name="TamagochiList" Margin="10,34,10,118" ItemsSource="{Binding TamagochiList}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Name" Width="100" DisplayMemberBinding="{Binding Path=Name}" />
                    <GridViewColumn Header="Health" Width="200" DisplayMemberBinding="{Binding Path=Health}" />
                </GridView>
            </ListView.View>
        </ListView>

我尝试在viewmodel中添加它,但我目前不知道如何使用它:

   public string TamagochiStatus(Tamagochi t)
        {
            if(t.Boredom >= t.Hunger && t.Boredom >= t.Sleep)
            {
                return "Bored";
            }
            if(t.Hunger >= t.Boredom && t.Hunger >= t.Sleep)
            {
                return "Hungry";
            }
            if(t.Sleep >= t.Boredom && t.Sleep >= t.Hunger)
            {
                return "Sleepy";
            }
            return "Geen status";
        }

尽我所能找到它,但我不确定选择哪个关键字。

1 个答案:

答案 0 :(得分:0)

由于Status是数据本身的属性,而不仅仅是UI的工件,因此将计算移动到模型类中的属性中。

public class Character
{
     public string Name {get; set;}
     public int Health {get; set;}
     public int Boredom {get; set;}
     public int Sleep {get; set;}
     public int Hunger {get; set;}
     public string Status
     {
          get
          {
               if(Boredom >= Hunger && Boredom >= Sleep)
               {
                    return "Bored";
               }
               if(Hunger >= Boredom && t.Hunger >= Sleep)
               {
                    return "Hungry";
               }
               if(Sleep >= Boredom && Sleep >= Hunger)
               {
                    return "Sleepy";
               }
               return "Geen status";
          }
}

然后通过

直接绑定到该属性
<GridViewColumn Header="Status" Width="200" DisplayMemberBinding="{Binding Path=Status}" />