c# - WPF如何从MVVM中的动态对象更改属性标签

标签 c# wpf mvvm properties

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

enter image description here

如果标签的内容随着创建的每个不同的对象(人)而变化,你如何在真正的 MVVM 风格中定义它?我不能让 View 模型控制 View ,对吗?所以我不能

label.Content = person.hair_Color;

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

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

最佳答案

在“真正的 MVVM 风格”中,您将拥有如下内容:
意见
主视图包含:

  • “添加人员”按钮 <Button Command={Binding AddPerson}/>
  • 包含一些“PersonView”的列表<ListBox ItemsSource="{Binding Persons}"/>

  • PersonView 包含:
  • 一个标签“衬衫”<TextBlock Text="{Binding Shirt}"/>
  • 一个标签“头发”<TextBlock Text="{Binding Hair}"/>
  • 一个矩形(例如)“ShirtGraphic”<Rectangle Background="{Binding Shirt, Converter={stringToColorConverter}/>
  • 一个矩形“HairGraphic”<Rectangle Background="{Binding Hair, Converter={stringToColorConverter}/>

  • StringToColorConverter 类,从字符串返回颜色
    View 模型
    MainViewModel 包含:
  • PersonViewModel "Persons"的可观察集合属性 public ObservableCollection<PersonViewModel> Persons { get; set; }
  • 命令“AddPerson”public Command AddPerson { get; set; }

  • PersonViewModel 包含:
  • 字符串属性“衬衫”public string Shirt { get; set; }
  • 字符串属性“头发”public string Hair { get; set; }

  • 这几乎只是您实际拥有的模型,因为实现取决于所使用的框架,但想法就在这里。你绑定(bind),你转换,等等。
  • 它没有实现任何 INotifyPropertyChanged 或 ICommand
  • 没有为 ListBox 设置 DataTemplate(实际显示一些 PersonView)
  • 关于c# - WPF如何从MVVM中的动态对象更改属性标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41827826/

    相关文章:

    wpf - 使用 DataTrigger 将不同的 View 应用到同一个 ViewModel

    C# Windows 服务 XML

    c# - 如何 ContinueWith 前提的状态对象?

    c# - WPF MouseDown 事件不会在控件中的任何地方触发

    wpf - 如何在我的 WPF 应用程序中为页面制作模式对话框?

    c# - MVVM:如何处理嵌套 ViewModel 之间的交互?

    c# - 如何知道 CancellationToken 是否有注册的取消方法?

    c# - 如何使用命名空间解析 XML

    c# - SurfaceListBox 选定项模板

    silverlight - 使用 MVVM 和 RIA 服务的不同绑定(bind)方法的优缺点