TwoWay Binding 不更新 IObservableVector

TwoWay Binding doesn't update the IObservableVector

各位程序员大家好,

我目前被卡住了,因为我无法弄清楚这些 TwoWay 绑定是如何工作的。我有一个 SETTING class 和一个带 IInspectables 的 IObservableVector 和一个带 IInspectables 的 IObservableVector 的 Page class。在 SETTING class 中,矢量存储装箱 winrt::hstring,页面 class 的矢量存储 SETTING classes.

我尝试将 hstrings 绑定到 listviewitems,将 listview 绑定到 Pivotitems,但是设置 class 的矢量不会更新。 但是当我将矢量的一个项目绑定到文本框时,它工作得很好并且也更新了列表视图中的第一个文本框。

<Pivot HorizontalContentAlignment="Left" Margin="10" ItemsSource="{x:Bind settings, Mode=OneWay}">
    <Pivot.ItemTemplate>
        <DataTemplate x:DataType="local:SETTING">
            <StackPanel>
                <ListView ItemsSource="{x:Bind setting_values, Mode=OneWay}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                             <StackPanel>
                                 <TextBox Text="{Binding Mode=TwoWay}" HorizontalAlignment="Stretch"></TextBox>
                              </StackPanel>
                         </DataTemplate>
                     </ListView.ItemTemplate>
                     <ListView.ItemContainerStyle>
                         <Style TargetType="ListViewItem">
                             <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
                             <Setter Property="Padding" Value="0"></Setter>
                         </Style>
                     </ListView.ItemContainerStyle>
                 </ListView>
                 <TextBox Text="{Binding setting_values[0], Mode=TwoWay}"></TextBox>
             </StackPanel>
        </DataTemplate>
    </Pivot.ItemTemplate>
</Pivot>

有谁知道我做错了什么以及为什么一个双向绑定有效而另一个无效

提前感谢您的帮助。

我用这个设置解决了它:

// SETTING.idl
runtimeclass SETTING : Windows.UI.Xaml.Data.INotifyPropertyChanged
{
    String description;
    String value;
}
//SETTING_VIEWMODEL.idl
import "SETTING.idl";

runtimeclass SETTINGS_VIEWMODEL
{
    Windows.Foundation.Collections.IObservableVector<SETTING> settings_vector{ get; };
}
//SETTINGS_PAGE.idl
import "SETTINGS_VIEWMODEL.idl";

[default_interface]
runtimeclass SETTINGS_PAGE : Windows.UI.Xaml.Controls.Page
{
    SETTINGS_PAGE();
    SETTING_VIEWMODEL settings{ get; };
}

现在您可以使用双向绑定来绑定值:

//SETTINGS_PAGE.xaml
<Listview ItemsSource="{x:Bind settings.settings_vector, Mode=OneWay}">
    <ItemsControl.ItemTemplate>
        <DataTemplate x:DataType="local:SETTING">
            <Grid Height="40">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{x:Bind description, Mode=OneWay}" Grid.Column="0" VerticalAlignment="Center" FontSize="18"></TextBlock>
                <TextBox Text="{x:Bind value, Mode=TwoWay}" Grid.Column="1" VerticalAlignment="Center" FontSize="18"></TextBox>
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</Listview>