uwp twoway绑定未更新UI

时间:2017-08-29 19:04:43

标签: xaml uwp win-universal-app windows-10-universal

我有以下XAML代码,其中我有TextBox用户输入(电话号码)和GridView用户联系人。

<GridView x:Name="ContactsCollection" Grid.Row="1" Style="{StaticResource DefaultGridView}" IsItemClickEnabled="True" ItemsSource="{Binding UserContacts}" ItemTemplate="{StaticResource HorizontalGridViewDataTemplate}" ItemContainerStyle="{StaticResource DefaultGridViewItemContainer}">
<i:Interaction.Behaviors>
    <c:EventTriggerBehavior EventName="SelectionChanged">
        <c:InvokeCommandAction Command="{Binding SelectContactCommand}" CommandParameter="{Binding SelectedItem, ElementName=ContactsCollection}"/>
    </c:EventTriggerBehavior>
</i:Interaction.Behaviors>
<GridView.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
</GridView.ItemsPanel>

我的TextBox绑定到ViewModel中的Recipient

<TextBox x:Uid="Recipient" Text="{Binding Recipient, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" PreventKeyboardDisplayOnProgrammaticFocus="True" toolkitControls:TextBoxMask.Mask="7(999)999-99-99" toolkitControls:TextBoxMask.PlaceHolder="X" InputScope="NumericPin" HeaderTemplate="{StaticResource UiControlHeaderDataTemplate}" Style="{StaticResource DefaultTextBoxStyle}"/>

这是来自ViewModel的代码。

    public string Recipient
    {
        get { return _recipient; }
        set
        {
            if (value != _recipient)
            {
                _recipient = value;
                RaisePropertyChanged(nameof(Recipient));
                ContinueTransferCommand.RaiseCanExecuteChanged();
            }
        }
    }

现在,当我点击GridView中的任何联系人时,会调用以下函数,将联系人的电话号码分配给收件人属性。

    private void SelectContactCommandAction(object contact)
    {
        Contact c = contact as Contact;
        if (c.Phones?.Count > 0)
            Recipient = FormatDataHelper.FormatPhoneNumber(c.Phones.FirstOrDefault().Number);
    }

当我点击 FIRST 时间的任何联系人时,将更新“收件人”属性,并且还会更新UI。但是,如果我选择其他联系人,在调试模式中我可以看到,Recipient属性已更新并保存了新值,但UI(TextBox)根本没有更新。它唯一的工作方式是,我必须从TextBox中删除任何字符并再次选择一个联系人,在这种情况下,UI值将再次更新。

有人可以解释一下吗?

0 个答案:

没有答案