0

私は次のXMLファイルを持っています:

<Palettes>
  <Palette>
    <Primary Name="Black"/>
    <Other Name="Blue"/>
    <Other Name="Red"/>
  </Palette>
  <Palette>
    <Primary Name="Green"/>
    <Other Name="Orange"/>
    <Other Name="Yellow"/>
    <Other Name="Violet"/>
  </Palette>
</Palettes>

2つのコンボボックスが必要です。1つは各パレットの原色を表示し、もう1つは最初のコンボで選択したパレットの「その他」の色を表示します。

可能であれば、このデータバインディングをコードビハインドではなくXAMLファイルで実行したいと思います。

次のXAMLファイルがあります。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="80" Width="350">
    <Window.Resources>
        <XmlDataProvider x:Key="Palettes" Source="pack://siteoforigin:,,,/Palettes.xml" />
    </Window.Resources>
    <Grid>
        <ComboBox x:Name="cbxPrimary"
                  DisplayMemberPath="Primary/@Name"
                  ItemsSource="{Binding Mode=OneWay, Source={StaticResource Palettes}, XPath=/Palettes/Palette}"
                  Margin="10,10,175,10"
                  SelectedIndex="0"/>
        <ComboBox x:Name="cbxOther"
                  DisplayMemberPath="Other/@Name"
                  ItemsSource="{Binding ElementName=cbxPrimary, Mode=OneWay, Path=SelectedItem}"
                  Margin="175,10,10,10"
                  SelectedIndex="0"
                  SelectedValue="{Binding XPath=./Other/@Name}"
                  SelectedValuePath="./Other/@Name"/>
    </Grid>
</Window>

ただし、これにより、2番目のコンボボックスに「その他」の色の空白のエントリが表示されます。

空白のコンボボックス

何かが足りないのか、それとも正しくコーディングされていないのかわかりません。これはどのように修正できますか?

4

1 に答える 1

2

の名前がDisplayMemberPath​​示すように、任意にネストされたノードや属性ではなく、メンバーへのパスです。バインディングを次のように変更します。

<ComboBox x:Name="cbxOther"
          DataContext="{Binding ElementName=cbxPrimary, Path=SelectedItem}"
          ItemsSource="{Binding XPath=./Other/@Name}"
          Margin="175,10,10,10"
          SelectedIndex="0"/>

SelectedValue/Pathとの使用DisplayMemberPathは、表示が基になる値と異なる場合にのみ意味があります。

于 2012-08-13T20:15:28.200 に答える