Wpf - Binding

  • WPF

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Wpf - Binding

    Hallo zusammen,

    kann man mittels

    <TextBlock Grid.Row="4" ">
    <TextBlock.Text>
    <Binding ElementName="Combobox" Path="Text"></Binding>
    </TextBlock.Text>
    </TextBlock>

    auf eine Combobox zugreifen und deren Inhalt auslesen?

    Dirk

    P.S.

    Klappt irgendwie nicht :(
    Bei ElementName muss der Name der ComboBox angegeben werden....

    VB.NET-Quellcode

    1. <ComboBox Name="MyComboBox" />
    2. <TextBlock Text="{Binding ElementName=MyComboBox, Path=Text}" />


    Nur eine andere mögliche Syntax - funktioniert natürlich auch wie von dir angegeben.

    XML-Quellcode

    1. <ComboBox Grid.Row="0" Grid.Column="0" Margin="0,0,0,0" Name="Testy" Height="24" Background="White"
    2. HorizontalAlignment="Left" Width="180" VerticalContentAlignment="Center" ItemsSource="{Binding}" BorderBrush="White"
    3. Style="{StaticResource ComboStyle}" MaxDropDownHeight="0" IsEditable="False" Focusable="False" BorderThickness="1,0,1,0" >
    4. <ComboBox.ItemTemplate>
    5. <DataTemplate>
    6. <StackPanel Orientation="Horizontal" Width="201" >
    7. <TextBlock Text="{Binding Testy}" Margin="5,0,0,0" />
    8. </StackPanel>
    9. </DataTemplate>
    10. </ComboBox.ItemTemplate>
    11. </ComboBox>


    Hoffentlich hilft das :-)...

    Dirk

    Code-Tags eingefügt. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Übrigens kannst du das ganze in den XML-Codetag machen, dann kann man das besser lesen. Wie @sandiro schon gesagt hat, musst du deiner ComboBox mit ​x:Name einen Namen geben, an welchen du dann mit

    XML-Quellcode

    1. <TextBlock Text="{Binding ElementName=NameDerComboBox,Path=SelectedItem}" />

    binden kannst.
    Mfg
    Vincent

    Ist ja auch richtig, das er dir das anzeigt, denn das SelectedItem ist vom Typ DataRowView.

    Ich würde das so machen:

    XML-Quellcode

    1. <ComboBox ItemsSource="{Binding MyCollectionViewProperty}" IsSynchronizedWithCurrentItem="True">
    2. <ComboBox.ItemTemplate>
    3. <DataTemplate>
    4. <StackPanel Orientation="Horizontal" >
    5. <TextBlock Text="{Binding MyProperty}" Margin="5,0,0,0" />
    6. </StackPanel>
    7. </DataTemplate>
    8. </ComboBox.ItemTemplate>
    9. </ComboBox>
    10. <TextBox Text="{Binding MyProperty}"/>

    C#-Quellcode

    1. public Class MyClass{
    2. private String myProperty;
    3. public MyClass(){}
    4. public MyClass(String myProperty){
    5. this.myProperty=myProperty;
    6. }
    7. public String MyProperty{
    8. get{
    9. return myProperty;
    10. }
    11. set{
    12. myProperty=value;
    13. }
    14. }
    15. }
    16. public Class MyViewModel{
    17. private BindingListCollectionView myCollectionViewProperty;
    18. private List<MyClass> myClassList = new List<MyClass>();
    19. public MyViewModel(){
    20. myClassList.Add(new MyClass("Test");
    21. myClassList.Add(new MyClass("Test2");
    22. myCollectionViewProperty = CollectionViewSource.GetDefaultView(myClassList) as BindingListCollectionView;
    23. }
    24. public BindingListCollectionView MyCollectionViewProperty{
    25. get{
    26. return myCollectionViewProperty;
    27. }
    28. }
    29. }


    (Ist jetzt aus dem Kopf geschrieben, sollte aber so funktionieren ;) )
    @HamburgerJungeJr: c# kann schöner:

    C#-Quellcode

    1. public class MyClass {
    2. public MyClass() { }
    3. public MyClass(String myProperty) {
    4. this.MyProperty = myProperty;
    5. }
    6. public String MyProperty { get; set; }
    7. }
    8. public class MyViewModel {
    9. private List<MyClass> myClassList = new List<MyClass>();
    10. public MyViewModel() {
    11. myClassList.Add(new MyClass("Test"));
    12. myClassList.Add(new MyClass("Test2"));
    13. MyCollectionViewProperty = (BindingListCollectionView)CollectionViewSource.GetDefaultView(myClassList);
    14. }
    15. public BindingListCollectionView MyCollectionViewProperty { get; private set; }
    16. }
    Und mit as sollte man nur typUmwandeln, wenn man auch überprüft, ob die Umwandlung durchgeführt werden konnte (was ich übrigens nicht glaube, dass das geht).