如何解决通过 DataTemplate 向绑定到 WPF 应用程序中的 UI 的类添加动态属性特定于实例的动态属性
我有一个 WPF 应用程序。我有一个如下所示的 Person 类:
public class Person
{
public Person(string id,string name,int age)
{
Id = id;
Name = name;
Age = age;
}
public string Id { set; get; }
public string Name { set; get; }
public int Age { set; get; }
}
public ObservableCollection<Person> People { get; set; }
我的视图如下所示:
<Grid>
<ItemsControl x:Name="DynamicPeople" ItemsSource="{Binding Path=People}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Background="Gray" Margin="6">
<StackPanel Orientation="Horizontal">
<Label Content="Id"/>
<Label Content="{Binding Path=Id}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Name"/>
<Label Content="{Binding Path=Name}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Age"/>
<Label Content="{Binding Path=Age}"/>
</StackPanel>
<Button Width="120" Height="60">Add New Property</Button>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
运行应用程序时,我们得到:
现在,要求是在单击“添加新属性”按钮后,将打开一个弹出窗口,用户将在其中填写“属性名称”、“属性类型”和“属性值”。一旦用户在弹出窗口中单击“应用”,我们将返回到显示的视图,新属性应添加到数据模板中。例如,如果用户在弹出窗口中填写了 Adam:
物业名称:职业
属性类型:字符串
属性值:“老师”
然后,点击弹出窗口中的应用按钮,我们将得到:
public string Occupation { get; set; }
已添加到 Person 类,但仅添加到 Adam 的第一个实例。
我考虑声明一个名为 DynamicProperty 的模型类:
public class DynamicProperty
{
public string Name { set; get; }
public Type Type { set; get; }
public object Value { set; get; }
}
然后,我将添加到 person 类中:
public ObservableCollection<DynamicProperty> DynamicProperties { get; set; }
这将代表特定于类 person 实例的动态属性。
然后我不知道如何编辑数据模板来以与现有属性类似的方式(如姓名和年龄)显示新添加的属性。
我不喜欢我的方法,也许您有更好的想法?谢谢!
解决方法
最终,我已经按照我在我的问题中提出的建议实施了它:
我已添加到人类:
public ObservableCollection<DynamicProperty> DynamicProperties { get; set; }
然后在原始 DataTemplate 中使用了一个带有 itemTemplate 的附加 ItemsControl。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。