Я использую 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-онтология: Теперь я использую Java API для запроса онтологии. Например, если у меня <?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>
Wayne_Smith
, как я могу запросить модуль, за который он отвечает?
Уэйн, какой именно API вы используете? Если это API-интерфейс Manchester owl, вы найдете несколько примеров кода в их документации здесь, которые должны помочь вам решить эту проблему.