TwoWay绑定不会更新IObservableVector

时间:2019-08-04 19:27:19

标签: uwp winrt-xaml c++-winrt

各位程序员,

我目前陷入困境,因为我无法弄清楚这些TwoWay绑定的工作方式。我也有一个带有IInspectables的IObservableVector的SETTING类和一个带有IInspectables的IObservableVector的Page类。在SETTING类中,向量存储盒装winrt :: hstring,而Page类的向量存储SETTING类。

我试图将hstring绑定到listviewitems,并将listview绑定到Pivotitems,但是SETTING类的向量不会被更新。 但是,当我将向量的一个项目绑定到文本框时,它可以很好地工作,并且也可以更新列表视图中的第一个文本框。

<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>

有人知道我做错了什么,为什么一个双向绑定有效而另一个不起作用

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我通过以下设置解决了该问题:

hidden
// 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; };
}

现在,您可以使用TwoWay绑定来绑定值:

//SETTINGS_PAGE.idl
import "SETTINGS_VIEWMODEL.idl";

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