当列表的所选项目更改为新项目时​​,上一个列表项目的ViewModel字段设置为空

时间:2013-04-22 14:14:28

标签: data-binding combobox winrt-xaml datatemplate contentcontrol

我正在用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"/>

0 个答案:

没有答案