我正在用VB编写商店应用程序框架。
设置:
我有一个viewmodel对象列表。它以ListView
表示。此ListView
的所选项目绑定到Content
的{{1}}属性。 ContentControl
可以编辑视图模型对象。 ContentControl的ContentControl
提供DataTemplate
来为视图模型对象的属性选择一个可能的值。 ComboBox
属性绑定查看模型对象列表属性,ComboBox.ItemsSource
属性绑定到VM对象的SelectedItem
属性。
假设我在SelectedItem
中有2个视图模型对象。
问题:假设选择ListView
的第一项。当我在ListvieW
中选择第二项时,第一个VM对象的ListView
属性会收到值为Nothing的更新。堆栈跟踪显示更新来自外部,可能来自绑定系统。这很奇怪,它也会破坏第一个VM对象的SelectedItem
属性中的数据。我是否在某处导致绑定系统出现这种行为的错误?
Page XAML
SelectedItem
查看模型
<DataTemplate
x:Key="BiofeedbackDetails">
<StackPanel
Orientation="Vertical"
d:DataContext="{Binding Source={d:DesignInstance Type=local:biofeedback_item, IsDesignTimeCreatable=True}}">
<Grid Height="55">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="82*"/>
<ColumnDefinition Width="223*"/>
</Grid.ColumnDefinitions>
<TextBlock
Margin="10,10,0,0"
TextWrapping="Wrap"
Text="Atmosfere"
Foreground="{StaticResource TextColorBrush1}"
Style="{StaticResource BasicTextStyle}"/>
<ComboBox
Grid.Column="1"
Margin="10,10,0,0"
Grid.ColumnSpan="2"
ItemsSource="{Binding AtmosfereList, Mode=OneTime}"
SelectedItem="{Binding AtmosfereSelectedItem, Mode=TwoWay}"
BorderBrush="#CC000000"/>
</Grid>
...
</StackPanel>
</DataTemplate>
<ListView
x:Name="lvTriggers"
ItemTemplate="{StaticResource TrigTemplateMusicVolumeByMaxMinTrend}"
ItemsSource="{Binding BiofeedbackList}"
SelectedItem="{Binding SelBioFeedback, Mode=TwoWay}"
Grid.Row="1"
Margin="10,10,0,10"/>
<ContentControl
x:Name="cpTrigger"
Content="{Binding SelectedItem, ElementName=lvTriggers}"
Grid.RowSpan="2"
ContentTemplate="{StaticResource BiofeedbackDetails}"
Grid.Column="1"
Margin="10,10,0,0"/>