2015-04-01 3 views
0

Я реализую проект WP8.1 с MVVMlight. В моем проекте у меня есть несколько ViewModels (по функциям).MVVMLight: Xaml не обновляется при обновлении viewmodel

Когда My IHM загружается, привязка к ViewModels работает нормально.

Но когда я нажимаю кнопку IHM, чтобы обновить мою модель Viewmodel (я использую RelayCommand), мой IHM не обновляет поля в соответствии с моими ViewModels.

код Xaml:

<Page 
x:Class="ApplicationMobileWinPhone.IHM.Test" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:ApplicationMobileWinPhone.IHM" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
DataContext="{Binding Main, Source={StaticResource Locator}}"> 
<Grid> 
    <TextBox Foreground="Black" x:Name="TextAdress" Text="{Binding mytest.A}" Margin="0,40,0,0" ></TextBox> 
    <Button Command="{Binding mytest.SearchCommand, Mode=OnWay}" Content="OK" 
      CommandParameter="{Binding Text, ElementName=TextAdress}" 
      BorderThickness="0" MinHeight="39" MinWidth="39" x:Name="ButtonSearch" VerticalAlignment="Bottom" Height="50" Width="32" Margin="358,-9,0,593"> 

    </Button> 
</Grid> 

ViewModels Реализация:

public class Mytest : ViewModelBase 
{ 
    private RelayCommand<string> _searchCommand; 
    private readonly INavigationService _navigationService; 
    public string A 
    { 
     get; 
     set; 
    } 
    public Mytest(INavigationService nav) 
    { 
     _navigationService = nav; 
     A = "init"; 
    } 
    public RelayCommand<string> SearchCommand 
    { 
     get 
     { 
      return _searchCommand 
        ?? (_searchCommand = new RelayCommand<string>(
         a => 
         { 
          A = "modify"; 
         } 
      )); 
     } 
    } 
} 

Я не понимаю, потому что есть другие ViewModels и она отлично работает.

+0

В вашей собственности не реализовано 'INotifyPropertyChanged'. –

+0

Спасибо Майку! Он работает отлично! Пожалуйста, Можете ли вы объяснить мне, почему в другой viewmodel, я не реализую INotifyPropertyChanged, и он отлично работает? – DingDing

+1

Связывание будет работать, но только один раз. Если вы затем измените свойство, представление не будет обновляться, если вы не сообщите об этом. Следовательно, 'INotifyPropertyChanged'. –

ответ

1

Вам необходимо позвонить в RaisePropertyChanged, вам не придется его реализовывать. Просто добавьте следующую строку после назначения нового значения полю:

... 
A = "modify"; 
RaisePropertyChanged(() => A); 
... 
Смежные вопросы