2010-07-16 4 views
0

Приветствуем ребят, надеюсь, у кого-то есть свежие глаза и может помочь мне определить проблему здесь, я пытаюсь создать небольшое приложение с призмой и шаблоном MVVM, все работает хорошо до этого момента, мои команды правильно работают с аргументом, однако TextBlock здесь не привязан к свойству CurrentUserKey из его viewmodel, как и следовало ожидать.Справка по привязке WPF к объекту ViewModel (Prism)

У кого-нибудь есть идеи? заранее спасибо ...

LoginView.xaml (только соответствующие части для краткости) ...

<Grid DataContext="{Binding Path=., Source={StaticResource viewModel}}"> 
    <Grid Margin="10"> 
    <Label VerticalAlignment="Center" HorizontalAlignment="Right">Enter your Key:</Label> 
    <TextBlock Name="txtUserKey" Text="{Binding Path=CurrentUserKey}" Margin="2" /> 

    <Button cal:Click.Command="{Binding GenericButtonClick}" cal:Click.CommandParameter="7">7</Button> 
    <Button cal:Click.Command="{Binding GenericButtonClick}" cal:Click.CommandParameter="8">8</Button> 
    <Button cal:Click.Command="{Binding GenericButtonClick}" cal:Click.CommandParameter="9">9</Button> 
... 
    </Grid> 
... 

LoginViewModel.cs

public class LoginViewModel : ViewModelBase 
    { 
     public LoginViewModel() 
     { 
      GenericButtonClick = new DelegateCommand<string>(GenericButtonClickHandler); 
     } 

     private void GenericButtonClickHandler(string argument) 
     { 
      if (argument.Length < 2) { 
       CurrentUserKey += argument; 
      } 

      RaisePropertyChangedEvent("GenericButtonClick"); 
     } 

     public string CurrentUserKey { get; set; } 
     private ICommand GenericButtonClick { get; set; } 
    } 

ViewModelBase.cs

public class ViewModelBase:INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChangedEvent(string Property_name) 
    { 
     if (Property_name == null) return; 

     PropertyChangedEventArgs e = new PropertyChangedEventArgs(Property_name); 
     PropertyChanged(this, e); 
    } 
} 
+0

Если это не является обязательным, вы получите некоторый вывод в этот эффект в окне отладки в Visual Studio - можно вставить, что здесь тоже? –

+0

Извините за мой n00bness, в окне Debug или в окне Output? Если в окне отладки вы могли бы указать, какой объект я должен смотреть, пожалуйста? thnx – Geo

ответ

2

Вы не поднимаете PropertyChanged при изменении CurrentUserKey.

Кроме того, есть некоторые проблемы с привязкой к тексту в TextBox: См http://social.msdn.microsoft.com/forums/en-US/wpf/thread/c404360c-8e31-4a85-9762-0324ed8812ef/ и WPF: TextBox Text is not updating

+0

Спасибо, что ответили Даниэлю. Теперь я начну читать в текстовом поле, я думал, что он поднимал PropertyChanged здесь RaisePropertyChangedEvent («GenericButtonClick») из класса ViewModelBase, который в свою очередь вызывает PropertyChanged; нет? супер возможно Я что-то упустил (я полный n00b) – Geo

+1

Вы должны поднять PropertyChanged для свойства, которое изменилось. Таким образом, в вашем установщике CurrentUserKey вы должны вызвать RaisePropertyChangedEvent («CurrentUserKey»); –

+0

aaaaaaaaaaaaargggghhhh, вы абсолютно правы maaan, я поднимал неправильное свойство! (Вы также можете поднять его на ExecuteMethodHandler, но чтобы избежать дублирования, лучше с вашим предложением) ... спасибо человеку. – Geo

Смежные вопросы