// not too keen on this workaround
        // the parameter is passed in using x:Reference in the xaml
        // it represents a combobox (for now). This is an unwanted and fragile coupling
        public object Convert(object value, Type targetType,
                              object parameter, CultureInfo culture)
        {
            if (!(value is ICursorFilter))
            {
                return(null);
            }
            if (parameter == null)
            {
                return(value.ToString());
            }
            var cb = (System.Windows.Controls.ComboBox)parameter;

            return(FilterStringCreator.ToString((ICursorFilter)value, (FilterOutputFormat)cb.SelectedValue));
        }
        private void Ok_Click(object sender, RoutedEventArgs e)
        {
            var model    = (FilterBuilderModel)DataContext;
            var listItem = filterList.SelectedItem as FilterListItem;

            if (listItem == null)
            {
                return;
            }
            if (listItem.Tag.Equals("filter"))
            {
                Result = FilterStringCreator.ToString(model.CurrentFilterControlModel.CurrentFilter, model.CurrentFilterControlModel.OutputFormat);
            }
            else
            {
                Result = model.ViewConjunction;
            }
            DialogResult = true;
        }
Exemplo n.º 3
0
        // TODO this is very fishy.
        // In effect we now have a custom class that responds to UI changes
        // The underlying idea is that filters will update automagically,
        // at least I think that that is the general idea
        // I am pretty convinced now it is a BAD idea
        // we should leave this kind of model-changing stuff to the model
        private void Model_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            // do not update properties that we update ourselves
            // this code will not win prizes :)
            if (e.PropertyName.Equals(nameof(_model.CurrentFilter)) || // not needed
                e.PropertyName.Equals(nameof(_model.FilterString)) ||
                e.PropertyName.Equals(nameof(_model.IsValid)))
            {
                return;
            }

            // we want to update the filter according to its type
            switch (_filter)
            {
            case CursorFilterTypeF _filter:
                _filter = ConstructFFilter(_filter, _model);
                break;

            case CursorFilterTypeCTI _filter:
                _filter = ConstructCTIFilter(_filter, _model);
                break;

            case CursorFilterTypeCTCF _filter:
                _filter = ConstructCTCFFilter(_filter, _model);
                break;

            case CursorFilterTypeCTCTI _filter:
                _filter = ConstructCTCTIFilter(_filter, _model);
                break;
            }
            _model.CurrentFilter = _filter; // pass back the updated filter to the model.
            FilterValidator fv = new FilterValidator(_filter);

            _model.IsValid      = fv.Validate();
            _model.FilterString = FilterStringCreator.ToString(_filter, _model.OutputFormat);
        }