C# C UWP-更新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上没有显示任何内容 是否有人经历过类似

我的任务是用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; }