Уважаемые,
Я вхожу в мир XML, настраивая пользовательский интерфейс для надстройки Autodesk DataStandard.
A Combobox1 должен быть заполнен элементами StandardTextInfo указано в файле XML.Каждый элемент имеет следующие свойства:
-StandardTextNumber
-StandardTextDE
-StandardTextEN
-StandardTextFR
Вот файл StandardText.XML :
<?xml version="1.0" encoding="utf-8"?>
<StandardTextData xmlns="">
<StandardTextInfo StandardTextNumber="10" DE="KATZE" EN="CAT" FR="CHAT"></StandardTextInfo>
<StandardTextInfo StandardTextNumber="20" DE="HUND" EN="DOG" FR="CHIEN"></StandardTextInfo>
<StandardTextInfo StandardTextNumber="30" DE="PFERD" EN="HORSE" FR="CHEVAL"></StandardTextInfo>
</StandardTextData>
A Combobox2 должен быть заполнен элементами LanguageInfo , перечисленными в файле XML.Каждый элемент сделан из свойства LanguageName (DE = Deutsch, EN = Английский, FR = Francais).Вот файл Language.XML :
<?xml version="1.0" encoding="utf-8"?>
<LanguageData xmlns="">
<LanguageInfo LanguageName="DE"></LanguageInfo>
<LanguageInfo LanguageName="EN"></LanguageInfo>
<LanguageInfo LanguageName="FR"></LanguageInfo>
</LanguageData>
Вот предполагаемое использование:
- Пользователь выбирает из Combobox2 язык, на котором элементы будутотображаться в Combobox1 .
- Значения, отображаемые в Combobox1 DisplayMemberPath , должны быть связаны со свойством items, соответствующим значению, выбранному в Combobox2 .Таким образом, имя элемента может отображаться на языке, выбранном пользователем.
- Кроме того, Combobox3 отображает свойство StandardTextNumber элемента, выбранного в ComboBox1 .Используя Combobox (я говорю о Combobox3), а не Label, у Пользователя также есть возможность напрямую выбрать свойство элемента StandardTextNumber , которое наоборот обновляет элемент, отображаемый в Combobox1 (по-прежнему на языке, определенном в Combobox2 ).
Вот определение трех комбинированных списков в файле XAML:
<?xml version="1.0" encoding="utf-8"?>
<WPF:MainWindow>
x:Name="FileWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WPF="clr-namespace:CreateObject.WPF;assembly=CreateObject"
<Window.Resources>
<XmlDataProvider>
x:Key="Languages"
Source="C:\Language.xml"
XPath="/LanguageData"
</XmlDataProvider>
<XmlDataProvider
x:Key="StandardTexts"
Source="C:\StandardText.xml"
XPath="/StandardTextData"
</XmlDataProvider>
</Window.Resources>
<ComboBox>
x:Name="Combobox1"
IsEnabled="{Binding CreateMode}"
ItemsSource="{Binding Source={StaticResource StandardTexts}, XPath="StandardTextInfo"}"
SelectedItem="{Binding SelectedItem, ElementName=ComboBox3, Mode=OneWay}"
SelectedValue="{Binding SelectedValue, ElementName=ComboBox2, Mode=OneWay}"
SelectedValuePath="@StandardTextNumber"
DisplayMemberPath="{Binding SelectedValue, ElementName=ComboBox3, Mode=OneWay}"
</ComboBox>
<ComboBox>
x:Name="Combobox2"
IsEnabled="{Binding CreateMode}"
ItemsSource="{Binding Source={StaticResource Languages}, XPath="LanguageInfo"}"
SelectedValue="{Binding Prop[LanguageName].value}"
SelectedValuePath="@LanguageName"
DisplayMemberPath="@LanguageName"
</ComboBox>
<ComboBox>
x:Name="Combobox3"
IsEnabled="{Binding CreateMode}"
ItemsSource="{Binding Source={StaticResource StandardTexts}, XPath="StandardTextInfo"}"
SelectedItem="{Binding SelectedItem, ElementName=ComboBox1, Mode=OneWay}"
SelectedValue="{Binding SelectedValue, ElementName=ComboBox2, Mode=OneWay}"
SelectedValuePath="{Binding SelectedValue, ElementName=ComboBox1, Mode=OneWay}"
DisplayMemberPath="@StandardTextNumber"
</ComboBox>
</WPF:MainWindow>
Myвопросы:
1) Combobox1 SelectedValue & DisplayMemberPath , Combobox3 SelectedValue & SelectedValuePath : Я, вероятно, скучаю по логике: как должны быть выражены желаемые привязки?
2) Для чего нужен префикс @ во лбу связанных свойств?
3)Я почти уверен, что в действительности нет необходимости в источнике Language.XML : возможно ли заполнить Combobox2 непосредственно из языков, указанных в источнике StandardText.XML ?
4) ЯВ какой ситуации следует установить для свойства IsEnabled значение CreateMode или EditMode?
Заранее благодарим вас за добрые советы, которые вы можете предоставить.
С уважением, Леон