WPF如何在MVVM中更改动态对象的属性标签

时间:2017-01-24 12:05:47

标签: c# wpf mvvm properties

我有一个程序,当您单击该按钮时,它会创建一个具有随机属性的人。

enter image description here

如果标签的内容随着创建的每个不同对象(人物)而变化,那么如何在真正的MVVM风格中定义它?我无法让viewmodel控制视图,对吗?所以我不能

label.Content = person.hair_Color;

public class Person() 
    get set hair_Color, get set shirt_color, yadda yadda

因为可以有1个或无限量的人,如果我不知道会有多少人,我该如何动态添加标签的内容?

1 个答案:

答案 0 :(得分:3)

在真正的MVVM风格'中,你会有类似的东西:

浏览

MainView包含:

  • 按钮&#34;添加人物&#34; <Button Command={Binding AddPerson} /&GT;
  • 包含一些&#34; PersonView&#34;的列表<ListBox ItemsSource="{Binding Persons}"/>

PersonView包含:

  • 标签&#34;衬衫&#34; <TextBlock Text="{Binding Shirt}"/>
  • 标签&#34;头发&#34; <TextBlock Text="{Binding Hair}"/>
  • 一个矩形(例如)&#34; ShirtGraphic&#34; <Rectangle Background="{Binding Shirt, Converter={stringToColorConverter}/>
  • 一个矩形&#34; HairGraphic&#34; <Rectangle Background="{Binding Hair, Converter={stringToColorConverter}/>

StringToColorConverter类,从字符串

返回颜色

的ViewModels

MainViewModel包含:

  • PersonViewModel&#34; Persons&#34;的可观察集合属性public ObservableCollection<PersonViewModel> Persons { get; set; }
  • 命令&#34; AddPerson&#34; public Command AddPerson { get; set; }

PersonViewModel包含:

  • 字符串属性&#34;衬衫&#34; public string Shirt { get; set; }
  • 字符串属性&#34; Hair&#34; public string Hair { get; set; }

这几乎只是你实际拥有的一个模型,因为实现取决于所使用的框架,但这个想法就在这里。你绑定,转换等等。

  • 它没有实现任何INotifyPropertyChanged或ICommand
  • 没有为Lis​​tBox设置DataTemplate(实际显示一些PersonView)