亲爱的
我正在通过自定义Autodesk DataStandard加载项的UI进入XML世界。
组合框1 应该填充XML文件中列出的项目 StandardTextInfo 。每个项目均由以下属性组成:
-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>
组合框2 应填充XML文件中列出的项目 LanguageInfo 。每个项目都由属性LanguageName(DE = Deutsch,EN = English,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>
以下是预期用途:
-用户从组合框2 中选择要显示的项目所用的语言为组合框1 。
-组合框1 DisplayMemberPath 中显示的值必须绑定到与在组合框2 中选择的值相对应的项属性。因此,项目名称可以用用户选择的语言显示。
-此外, Combobox3 显示 Combobox1 中所选项目的属性 StandardTextNumber 。通过使用组合框(我谈论的是Combobox3)而不是标签,用户还可以选择直接选择项目属性 StandardTextNumber ,从而反向更新显示在 Combobox1 (仍然使用 Combobox2 中定义的语言)。
这是XAML文件中3个组合框的定义:
<?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>
我的问题:
1)组合框1 SelectedValue 和 DisplayMemberPath ,组合框3 SelectedValue 和 SelectedValuePath < / em>:我可能会错失逻辑:应该如何表达所需的绑定?
2)在XML中,绑定属性前额的前缀@的目的是什么?
3)我非常确定确实不需要源 Language.XML :是否可以直接从源中标识的语言填充 Combobox2 em> StandardText.XML ?
4)在哪种情况下,应将IsEnabled属性设置为CreateMode或EditMode? p>
在此先感谢您提供的友善建议。
最好的问候, 莱昂
答案 0 :(得分:0)
问题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现在毫无意义。
非常感谢北京RNL软件科技有限公司的白雪松提供了解决方案!
最诚挚的问候。