WPF: Binding zu SelectedItem ComboBox
Ich habe ein UserControl mit ComboBox, die basierend auf XML-Daten:
<Root>
<Node Background="Yellow" Foreground="Cyan" Image="1.ico" Property="aaaa" Value="28" />
<Node Background="SlateBlue" Foreground="Black" Image="2.ico" Property="bbbb" Value="2.5" />
<Node Background="Teal" Foreground="Green" Image="3.ico" Property="cccc" Value="4.0" />
<Node Background="Yellow" Foreground="Red" Image="4.ico" Property="dddd" Value="0" /></Root>
Hier ist die UserControl-XAML:
<UserControl x:Class="xxxxxxxx.MyComboBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="myComboBoxControl">
<UserControl.Resources>
<DataTemplate x:Key="dataTemplateNode">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="20"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" MinWidth="20"/>
</Grid.ColumnDefinitions>
<Border Background="{Binding XPath=@Background}" Grid.Column="0">
<Image Source="{Binding XPath=@Image}"
Width="16"
Height="16"
Margin="3" />
</Border>
<Border Background="{Binding XPath=@Background}" Grid.Column="1">
<TextBlock Foreground="{Binding XPath=@Foreground}"
Margin="3"
Text="{Binding XPath=@Property}" />
</Border>
<Border Background="{Binding XPath=@Background}" Grid.Column="2">
<TextBlock Foreground="{Binding XPath=@Foreground}"
Margin="3"
FontWeight="Bold"
Text="{Binding XPath=@Value}" />
</Border>
</Grid>
</DataTemplate>
<XmlDataProvider x:Key="xmlNodeList"
Source="/data/Combo.xml"
XPath="/Root/Node"/>
</UserControl.Resources>
<ComboBox Name="myComboBox"
ItemsSource="{Binding Source={StaticResource xmlNodeList}}"
ItemTemplate="{StaticResource dataTemplateNode}"
HorizontalContentAlignment="Stretch" /></UserControl>
In der MainForm.xaml-ich habe eine TextBox, möchte ich zu binden, das mein UserControl SelectedItem.
<StackPanel Orientation="Horizontal">
<local:MyComboBox1 x:Name="comboBoxST" />
<TextBox x:Name="textBoxST"/></StackPanel>
Werde ich froh sein, wenn Sie guid mir, wie zu tun.
Vielen Dank im Voraus!
InformationsquelleAutor user83493 | 2009-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der trick hier ist, dass, wenn Sie für die Bindung an die SelectedItem auf ein ItemControl an XML gebunden, wird das ausgewählte Element selbst ist ein XmlElement, und verwenden Sie die XPath-Ausdruck zu erhalten, um das erforderliche element/- Attribut.
Der einfachste Weg dies zu erreichen ist die Verwendung der DataContext:
Arbeitete für mich in Silverlight 5 ohne Angabe
XPath
einfach durch die Bindung an die Eigenschaft name des Ziel-statt Objekt wieText={Binding Description}
.InformationsquelleAutor Sergey Aldoukhov
Für was es Wert ist, habe ich es vorgezogen Sergey früheren Ansatz besser. Aber in meinem Fall hatte ich eine Beschriftung anstelle einer textbox, aber das funktionierte für mich:
Spaciba, Sergej.
InformationsquelleAutor Bishop
Die Antwort oben gepostet wurde für den Fall einer list-box direkt auf die form. Im Falle von UserControl und Vorlagen ComboBox, würde ich vermeiden, Reine xml-binding - zu viele Faktoren können es brechen. Verwenden Sie stattdessen diesen code zum erstellen einer dependency property:
Und die Bindung ist ganz einfach dann:
InformationsquelleAutor Sergey Aldoukhov