将复选框与网格相关联

时间:2013-06-19 20:32:41

标签: wpf mvvm

我有一个带有布尔列的网格。我试图与anothoer复选框控件关联,这样当我选中此复选框时,我的窗口显示一个来自网格的元素,其中布尔列为true(已选中)。

这是我的IsChecked属性

      private bool _isChecked;

      public bool IsChecked
    {
        set
        {
            _isChecked = value;

            InitializeMappedElements();

        }


        get { return _isChecked; }

    }

这是一种仅从网格中选择映射元素的方法          public ObservableCollection MappedList         {             get {return _mappedList; }             设置{_mappedList = value; }         }

    private ObservableCollection<MessageFieldViewModel> _mappedList = new ObservableCollection<MessageFieldViewModel>();

     private void InitializeMappedElements()
    {

        if (_isChecked)
        {
            var transactionRuleList =
                MessageFieldVModel.GetAllMessageField().Where(ame => ame.IsMapped == _isChecked);

            _mappedList = new ObservableCollection<MessageFieldViewModel>(transactionRuleList);
            messageFields = _mappedList;
            NotifyPropertyChanged("MessageFields");

        }
    }

在选择

上与网格关联
    public ObservableCollection<MessageFieldViewModel> MessageFields
       {
        set
        {
            if (_isChecked)
            {
                InitializeMappedElements();
            }

            NotifyPropertyChanged("MessageField");
        }
        get { return messageFields; }
    }

XAML

    <CheckBox  Foreground="WhiteSmoke" Content="Display only Mapped Fields" HorizontalAlignment="Center" 
                   Margin="198,35,473,74" FontFamily="Trebuchet MS" FontWeight="Bold" Grid.Column="1" 
                   IsChecked="{Binding Path= IsChecked,Mode=TwoWay}">
    </CheckBox>

当我选择什么都没有显示。为什么这不起作用?谢谢。

1 个答案:

答案 0 :(得分:0)

你的逻辑很难遵循,而且更难维护。不要直接设置支持字段,而是使用MessageFields属性并正常设置setter中的支持字段。

尽管如此,您应该考虑使用CollectionViewSource,因为这听起来只是视图的一个问题。