Поля со списком XML пересекаются - PullRequest
0 голосов
/ 24 декабря 2018

Уважаемые,

Я вхожу в мир 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?

Заранее благодарим вас за добрые советы, которые вы можете предоставить.

С уважением, Леон

1 Ответ

0 голосов
/ 10 апреля 2019

Ответ на вопрос 1:

StandardText.XML и Language.XML файлы не изменяются (см. Описание в посте выше)

Изменение 3 комбинированных списков в File.XAML или Inventor.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: no need to be defined
    # SelectedValuePath: no need to be defined
    DisplayMemberPath="{Binding ElementName=Combobox2, StringFormat=@{0}, Path=SelectedValue}"
</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: no need to be defined
    SelectedValuePath="@StandardTextNumber"
    DisplayMemberPath="@StandardTextNumber"
</ComboBox>

</WPF:MainWindow>

Наконец-то не так много модификаций, чтобы получить ожидаемый результат.Основными пунктами были:

- понимание цели SelectedValue и SelectedValuePath атрибутов

- синтаксис привязки StringFormat = @ {0}

Вопросы со 2 по 4 теперь бессмысленны.

Большое спасибо BAI Xuesong из BEIJING RNL SOFTWARE SCIENCE & TECH CO.LTD, который предоставил решение!

С наилучшими пожеланиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...