C# C UWP-更新UI以显示用户已读入的对象值
我的任务是用C语言创建我的第一个UWP应用程序 基本思想是读入XML文件并基于读入的数据创建对象,然后向IU中的用户显示对象中存储的属性 让我们假设一个有名字、年龄和身高的Person对象。我想在读入数据后显示Person字段,但在创建Person对象后无法在UI中显示任何内容 我创建了一个Person类,其中包含姓名、年龄和身高。我有另一个扩展ObservableCollection的类和一个查找observable类的ItemTemplate,但目前UI上没有显示任何内容 是否有人经历过类似的过程或知道要阅读的正确文档C# C UWP-更新UI以显示用户已读入的对象值,c#,data-binding,uwp,C#,Data Binding,Uwp,我的任务是用C语言创建我的第一个UWP应用程序 基本思想是读入XML文件并基于读入的数据创建对象,然后向IU中的用户显示对象中存储的属性 让我们假设一个有名字、年龄和身高的Person对象。我想在读入数据后显示Person字段,但在创建Person对象后无法在UI中显示任何内容 我创建了一个Person类,其中包含姓名、年龄和身高。我有另一个扩展ObservableCollection的类和一个查找observable类的ItemTemplate,但目前UI上没有显示任何内容 是否有人经历过类似
谢谢。首先,在UWP中,您可以选择两种类型的绑定: {x:Bind},在编译时稍微快一点,绑定到类后面的框架元素代码,但它不如其他类型的绑定灵活。 这种类型的绑定的默认模式是一次性的,因此,当您构建对象时,您只能将数据实际传播到UI上。 {Binding},在这种类型的绑定中,您只能引用父元素的DataContext中存在的变量。默认模式为单向。 考虑到这一点,首先处理ViewModel(它只是一组属性)与实际处理集合是不同的,因为我认为集合实际上无法检测项目本身的更改,而是检测其结构的更改。 因此,在集合中项目的添加/删除过程中,您必须实际向PropertyChanged EventHandler订阅/取消订阅这些项目 尽管如此,通过以下代码,我认为您应该能够开始将更新可视化到您的UI上: 视图模型 使用x:Bind公开您的属性并将其设置为页面的DataContext您不需要这样做,但您必须执行强制转换才能真正编译代码
public MainPage()
{
InitializeComponent();
PersonsList = new PersonsObservable<Person>();
this.DataContext = PersonsList;
PersonsList.Add(new Person());
PersonsList.Add(new Person());
}
PersonsObservable<Person> PersonsList { get; set; }
我还没有测试其中一个项目被更改的情况,但是您可以通过添加另一个按钮并单击事件来轻松地进行测试,并实际测试更改某个项目的属性是否会在您的UI中更新
如果您还有其他问题,请随时提出,我们将乐于提供帮助 谢谢!这是非常有用的,当你改变一个项目属性时,它会更新。哦,很高兴是这样,我能帮上忙!不管怎样,如果你觉得问题已经解决了,请将答案标记为已接受。
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel Orientation="Vertical">
<TextBlock Text="DataBinding" Foreground="DarkBlue" FontSize="18" FontWeight="Bold"/>
<ItemsControl ItemsSource="{Binding Mode=TwoWay}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Name: "/>
<TextBlock Text="{Binding name, Mode=TwoWay}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Age: "/>
<TextBlock Text="{Binding age, Mode=TwoWay}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Height: "/>
<TextBlock Text="{Binding height, Mode=TwoWay}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button Content="Add Items" Click="Button_Click" Background="Blue" VerticalAlignment="Bottom"/>
</StackPanel>
</Grid>
private void Button_Click(object sender, RoutedEventArgs e)
{
// Add Items
PersonsList.Add(new Person());
}
public MainPage()
{
InitializeComponent();
PersonsList = new PersonsObservable<Person>();
this.DataContext = PersonsList;
PersonsList.Add(new Person());
PersonsList.Add(new Person());
}
PersonsObservable<Person> PersonsList { get; set; }