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>
各位程序员大家好,
我目前被卡住了,因为我无法弄清楚这些 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>