Как я разрешаю, что ошибка Разработчика WPF 'Тип {0} не поддерживает прямое содержание'. '?

Глядя на ответ этого поста , вы можете использовать предикат flatten_term/2, немного модифицированный для обработки свободных переменных, чтобы решить вашу проблему. Вот код для базового решения:

flatten_term(Term,[Term]):-
    (atomic(Term);var(Term)),!.
flatten_term(Term,Flat):-
    Term =.. TermList,
    flatten_term_list(TermList,Flat),!.

flatten_term_list([],[]):-!.
flatten_term_list([H|T],List):-
    flatten_term(H,HList),
    flatten_term_list(T,TList),
    append(HList,TList,List),!.

occurrences(_,[],N,N):-!.
occurrences(A,[H|T],N,Tot):-
    A \== H,!,
    occurrences(A,T,N,Tot).
occurrences(A,[H|T],N,Tot):-
    A == H,!,
    N1 is N+1,
    occurrences(A,T,N1,Tot).

count(A,Term,N):-
    flatten_term(Term,Flatten),
    occurrences(A,Flatten,0,N).

?- count(a,f(a,g(X,a),d),T).
T = 2.

?- count(X,f(a,g(X,a),d),T).
T = 1

Прежде всего вы сгладьте термин, используя flatten_term/2. Затем просто посчитайте вхождения элемента, который вы хотите найти, используя occurrences/4. Вы можете, если хотите, изменить flatten_term/2, чтобы избежать использования occurrences/4 и, таким образом, сканировать термин (список) только один раз ... Что-то вроде: flatten_term(Term,Flatten,ElementToFind,Counter,Total).

7
задан Fabio Gomes 6 February 2009 в 12:59
поделиться

1 ответ

Необходимо инициализировать ContentPropertyAttribute с названием свойства, это собирается представить содержание класса. В Вашем случае, потому что Вы наследовались ObservableCollection, который был бы свойством Items. К сожалению, свойство Items только для чтения, и это не позволяется, потому что свойство Content должно иметь метод set. Таким образом, необходимо определить пользовательское свойство обертки вокруг Объектов и использования что в атрибуте - как так:

public class MyCustomItem
{ }

[ContentProperty("MyItems")]
public class MyCustomCollection : ObservableCollection<MyCustomItem>
{
    public IList<MyCustomItem> MyItems
    {
        get { return Items; }
        set 
        {
            foreach (MyCustomItem item in value)
            {
                Items.Add(item);
            }
       }
    }
}

И необходимо быть в порядке. Извините за выполнение этого в C#, когда Ваш пример находится в VB, но я действительно сосу в VB и не мог получить даже такую простую вещь право... Так или иначе это - снимок для преобразования его, таким образом - надеются, что это помогает.

5
ответ дан 7 December 2019 в 12:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: