Проблема с привязкой данных: как заставить значение Binding работать в обоих направлениях? - PullRequest
0 голосов
/ 09 ноября 2018

Я работаю над приложением MVVM WPF, и у меня есть CheckBox, над которым я пытаюсь работать. Я хочу, чтобы значение было привязано к свойству модели (что я и сделал). Однако, когда я щелкаю по нему в сеансе отладки, он никогда фактически не меняет мое свойство IsChecked на true со значения по умолчанию false. Пожалуйста, смотрите код ниже:

Модель

public class MyModel:INotifyPropertyChanged
{
        private bool _isChecked;
        public bool IsChecked
        {
            get { return _isChecked; }
            set
            {
                if (_isChecked == value)
                    return;
                _isChecked = value;
                OnPropertyChanged();
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
}

View

<StackPanel Orientation="Horizontal" Height="51" Width="667" Canvas.Left="10" Canvas.Top="45">
                <CheckBox IsChecked="{Binding IsChecked}" Command="{Binding CheckBoxClickCommand}"  Content="We're in the matrix" VerticalAlignment="Center" Margin="10,10,200,10"/>
            </StackPanel>

ViewModel

public class MyViewModel
{
    private MyModel _myModel = new MyModel();
    public ObservableCollection<MyModel> UrlsList { get; } = new ObservableCollection<MyModel>();
    public ICommand CheckBoxClickCommand { get; private set; }
    public MyViewModel()
    {
      CheckBoxClickCommand = new RelayCommand(CheckBoxOnClick);
    }
    public void CheckBoxOnClick()
        {
            var newList = new List<MyModel>();
            if (_myModel.IsChecked)
            {
                foreach (var url in UrlsList)
                {
                    if (!url.ExistsInDb)
                        newList.Add(url);
                }
            }
        }
}

Когда я отлаживаю и получаю оператор if в CheckBoxClickCommand, он, очевидно, идет к модели, чтобы получить значение свойства, но он не меняется со значения по умолчанию false на true. Любая помощь очень ценится, спасибо!

1 Ответ

0 голосов
/ 09 ноября 2018

Привязать к свойству модели:

<CheckBox IsChecked="{Binding Model.IsChecked}" ...>

Чтобы это работало, модель должна быть возвращена из открытого свойства модели представления:

private MyModel _myModel = new MyModel();
public MyModel Model { get { return _myModel; }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...