WPF: Как передать весь Control как CommandParameter через XAML?

Я использую MVVM, а пользовательские объекты ICommand предоставляются слоем ViewModel. Один объект ViewModel одновременно может быть присоединен через свойство DataContext ко многим объектам View (окнам, страницам и т. Д.). В ICommand.CanExecute () я хочу проверить отсутствие ошибок проверки для некоторых элементов управления в View (которые прикреплены к реквизитам ViewModel, существенным для конкретной команды VM). Одна ViewModel может предоставить много команд, каждый из них имеет собственный набор элементов управления для проверки правильности ошибок. Итак, псевдо-XAML:

<Button.CommandParameter>
    <x:Array Type="sys_win:DependencyObject">
        <sys_win:DependencyObject>
            <reference_to_textbox_or_other_control/>
        </sys_win:DependencyObject>
        <sys_win:DependencyObject>
            <reference_to_textbox_or_other_control/>
        </sys_win:DependencyObject>
    </x:Array>
</Button.CommandParameter>

Вторая проблема заключается в том, что конкретная команда может быть вызвана элементом управления, который сам является частью DataTemplate для элемента коллекции (в моем случае - частью шаблона данных ListBoxItem). Мой шаблонный элемент списка имеет два текстовых поля (связанных с двумя подпорками соответствующего ViewModel) и кнопку, которая вызывает команду ViewModel. Итак, в команде CanExecute () мне нужно проверить ошибки валидации для некоторых элементов управления окнами и двух текстовых полей, которые принадлежат этому элементу списка, а не другим элементам. Приведенный ниже код работает нормально, если я хочу передать свойство ListBoxItem.IsSelected как CommandParameter:

<Button DataContext="{Binding}" 
        Command="{Binding Path=SwitchCommand}"
        CommandParameter="{Binding Path=IsSelected, RelativeSource={
                                   RelativeSource
                                   Mode=FindAncestor,
                                   AncestorType={x:Type ListBoxItem}}}"/>

Но как я могу передать весь (DependencyObject) ListBoxItem как CommandParameter? И как этот ListBoxItem,

У меня есть OWL-онтология:

<?xml version="1.0"?>
<rdf:RDF
    xmlns="http://www.owl-ontologies.com/Ontology1272923485.owl#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xml:base="http://www.owl-ontologies.com/Ontology1272923485.owl">
  <owl:Ontology rdf:about=""/>
  <owl:Class rdf:ID="studypath">
    <owl:disjointWith>
      <owl:Class rdf:ID="module"/>
    </owl:disjointWith>
    <owl:disjointWith>
      <owl:Class rdf:ID="docent"/>
    </owl:disjointWith>
  </owl:Class>
  <owl:Class rdf:about="#docent">
    <owl:disjointWith>
      <owl:Class rdf:about="#module"/>
    </owl:disjointWith>
    <owl:disjointWith rdf:resource="#studypath"/>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
                            >1</owl:minCardinality>
        <owl:valuesFrom>
          <owl:Class rdf:about="#module"/>
        </owl:valuesFrom>
        <owl:onProperty>
          <owl:ObjectProperty rdf:ID="responsiblefor"/>
        </owl:onProperty>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
  </owl:Class>
  <owl:Class rdf:about="#module">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty>
          <owl:ObjectProperty rdf:ID="predecessor_module"/>
        </owl:onProperty>
        <owl:someValuesFrom rdf:resource="#module"/>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:someValuesFrom rdf:resource="#module"/>
        <owl:onProperty>
          <owl:ObjectProperty rdf:ID="folgemodule"/>
        </owl:onProperty>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
                            >1</owl:minCardinality>
        <owl:onProperty>
          <owl:ObjectProperty rdf:ID="offeredfor"/>
        </owl:onProperty>
        <owl:valuesFrom rdf:resource="#studypath"/>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
    <owl:disjointWith rdf:resource="#docent"/>
    <owl:disjointWith rdf:resource="#studypath"/>
  </owl:Class>
  <owl:ObjectProperty rdf:about="#predecessor_module">
    <rdfs:range rdf:resource="#module"/>
    <rdfs:domain rdf:resource="#module"/>
    <owl:inverseOf>
      <owl:ObjectProperty rdf:about="#folgemodule"/>
    </owl:inverseOf>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="#folgemodule">
    <owl:inverseOf rdf:resource="#predecessor_module"/>
    <rdfs:range rdf:resource="#module"/>
    <rdfs:domain rdf:resource="#module"/>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="#offeredfor">
    <rdfs:range rdf:resource="#studypath"/>
    <rdfs:domain rdf:resource="#module"/>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="#responsiblefor">
    <rdfs:domain rdf:resource="#docent"/>
    <rdfs:range rdf:resource="#module"/>
  </owl:ObjectProperty>
  <module rdf:ID="Datenbanken">
    <offeredfor>
      <studypath rdf:ID="WIN"/>
    </offeredfor>
  </module>
  <docent rdf:ID="John_Smith">
    <responsiblefor rdf:resource="#Datenbanken"/>
  </docent>
  <module rdf:ID="Softwaretechnik"/>
  <docent rdf:ID="Wayne_Smith">
    <responsiblefor rdf:resource="#Softwaretechnik"/>
  </docent>
</rdf:RDF>

Теперь я использую Java API для запроса онтологии. Например, если у меня Wayne_Smith , как я могу запросить модуль, за который он отвечает?

1
задан Joshua Taylor 2 June 2013 в 19:45
поделиться

1 ответ

Уэйн, какой именно API вы используете? Если это API-интерфейс Manchester owl, вы найдете несколько примеров кода в их документации здесь, которые должны помочь вам решить эту проблему.

1
ответ дан 2 September 2019 в 22:09
поделиться
Другие вопросы по тегам:

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