Флажок twoway mode не обновлять viewmodel

#silverlight #silverlight-4.0 #mvvm

#silverlight #silverlight-4.0 #mvvm

Вопрос:

Здесь очень простая проблема. У меня есть несколько флажков с их отмеченными привязками, установленными к свойствам в моей viewmodel.Режим привязки — twoway. Однако, когда они отмечены, свойство viewmodel не обновляется. Я нашел сообщение о настройке режима щелчка флажка, и я перепробовал все варианты: наведите курсор, нажмите и отпустите. Ни одно из этих действий не устраняет проблему.

Комментарии:

1. Образец вашего Xaml был бы полезен.

Ответ №1:

Является ли ваше свойство обнуляемым bool, подобным CheckBox.IsChecked ?

В противном случае проверьте все, что необходимо для работы шаблона MVVM: ваше свойство является общедоступным с получателем и установщиком, реализацией INotifyPropertyChanged и т.д.

Правильно ли привязаны другие свойства? Вы DataContext можете ошибаться…

Ответ №2:

Попробуй это:

 <Window x:Class="WpfTestApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" >
    <StackPanel>
        <CheckBox Width="250" Height="30" IsChecked="{Binding Path=IsTrue, Mode=TwoWay}" />
        <TextBlock Text="{Binding Path=IsTrue}" />
    </StackPanel>
</Window>
  

Создать ViewModel:

 public class MainWindowViewModel :INotifyPropertyChanged
{
    private bool _isTrue;
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChange(string propertyName)
    {
        if(PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public bool IsTrue
    {
        get { return _isTrue; }
        set
        {
            _isTrue = value;
            OnPropertyChange("IsTrue");
        }
    }
}
  

Привязка к модели просмотра в коде MainWindow.cs позади

 public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MainWindowViewModel();
    }
}