| 

.NET C# Java Javascript Exception

1
Hi zusammen,

in meinem Projekt wird eine ListBox dynamisch durch ein Binding gefüllt.
<ListBox Margin="0,70.6,0,34.5"
BorderThickness="0"
BorderBrush="{x:Null}"
Background="{x:Null}"
Foreground="#FFB6B6B6"
ItemsSource="{Binding TagList}"
>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>


Jetzt möchte ich den TextBlock der einzellnen Items als Button verwenden und ein Command dran binden.

<ListBox.ItemTemplate>
<DataTemplate>
<Button BorderBrush="{x:Null}" Background="{x:Null}" ClickMode="Press" Command="{Binding OpenSettingsCommand}">
<TextBlock Text="{Binding Name}" />
</Button>
<!--<TextBlock Text="{Binding Name}">
<TextBlock.InputBindings>
<MouseBinding Command="{Binding OpenSettingsCommand}" />
</TextBlock.InputBindings>
</TextBlock>-->
</DataTemplate>
</ListBox.ItemTemplate>


Das Problem ist das es nicht Funktioniert. Bei einem Klick auf einen ListBox Item wird kein Command getriggert. Wenn ich das Command an einen Statischen button Binde dann funktioniert es ohne Probleme.

Selbst wenn ich die ListBox Items zu Buttons mache ist es nicht möglich an diese Buttons einen Command zu binden. Bei einem klick auf diese Items passiert trotz dem nichts.

Hat jemand eine Idee wie man ein Command an ein Dynamisch erstellten ListBox Item binden kann?
21.02.2014
Damien 43 1 6
3 Antworten
0
IMO ist es einfacher, über Behaviors/Trigger zu gehen.
<ListBox ..... >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<local:EventToCommand Command="{Binding OpenSettingsCommand}" />
</i:EventTrigger
</i:Interaction.Triggers>
..
..
</ListBox>

Man kann auch zusätzlich noch einen CommandParameter mit der Id des Items übergeben.
21.02.2014
judgy 3,0k 1 1 8
leider funktioniert das nicht weil "EventToCommand Command" nicht aufgelöst werden können.
Damien 21.02.2014
0
Drei Alternativen...

1) RelayCommand verwenden -> hier

2) Wenn du mit RoutedUICommand arbeitest, kommst du mit Bordmitteln um Code Behind nicht herum -> hier

3) Du postest wie dein Command implementiert ist und wo (ViewModel z.B.) dann sehen wir uns das weiter an

Gruß
Maria
21.02.2014
Maria Simlinger 1,1k 1 9
0
OK, es hat mit einem Binding funktioniert :)

<ListBox Margin="0,70.6,0,34.5"
BorderThickness="0"
BorderBrush="{x:Null}"
Background="{x:Null}"
Foreground="#FFB6B6B6"
ItemsSource="{Binding TagList}"
SelectedValue="{Binding Path=SelectedItem, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>


private MyType _selectedItem;

public MyType SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem= value;
OnPropertyChanged();
}
}


Danke allen Antworten :)
23.02.2014
Damien 43 1 6
1
Dir ist bewusst, dass deine Lösung nichts mit der Frage zu tun hat? ;)
Maria Simlinger 23.02.2014
Möglicherweise ^^
aber es hat funktioniert :)
Damien 23.02.2014
Kannst Du dann bitte den Code posten, der das Binding des Events zum Command zeigt?
lbm1305 26.02.2014
Ich glaube, er wollte die Sache mit SelectedItem gelöst haben, und dies aus welchem Grund auch immer mit einem Command lösen. Problem und Fragestellung haben in etwa soviel miteinander zu tun wie Nudeln und Fritatten (Wienerisch) ;)
Maria Simlinger 26.02.2014

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH