2012-03-30 3 views
2

ausgewählt ist So implementiere ich das MVVM (Light Toolkit) in einer Windows Phone-Anwendung. Ich habe eine ListBox, die SelectedItem an die Eigenschaft SelectedArticle gebunden ist. Hier unten ist die (sehr einfach) Eigenschaft:Der gute Weg, um Logik zu implementieren, wenn und Element in ListBox (MVVM)

private Article _selectedArticle; 
public Article SelectedArticle 
{ 
    get { return _selectedArticle; } 
    set 
    { 
      _selectedArticle = value; 
      base.RaisePropertyChanged("SelectedArticle"); 
    } 

} 

Also, was ich die Ansicht ändern mag, ist, wann und Element der List-Box überprüft wird. Wie auch immer, es wird einfach sein, die Änderung der Ansicht in das Settet zu bringen, aber ich möchte das vermeiden. Also, wie geht das?

Hier XAML:

<ListBox IsEnabled="{Binding ListBoxEnabled, Mode=TwoWay}" SelectedItem="{Binding SelectedArticle, Mode=TwoWay}" Opacity="{Binding Opacity, Mode=TwoWay}" ItemsSource="{Binding ArticlesList}" Height="634" Width="456"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Image 
         Margin="0,15" 
         VerticalAlignment="Top" 
         Source="{Binding Image}" 
         Height="100" 
         Width="100" /> 
        <StackPanel> 
         <TextBlock Margin="10,15" 
            Width="250" 
            TextWrapping="Wrap" 
            VerticalAlignment="Top" 
            HorizontalAlignment="Left" 
            FontSize="24" 
            Text="{Binding Content}" /> 
         <TextBlock Margin="20,0" 
            Width="100" 
            VerticalAlignment="Top" 
            HorizontalAlignment="Left" 
            FontSize="20" 
            Text="{Binding Id}"/> 
        </StackPanel> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Antwort

3

Haben Sie so etwas wie eine Interaktion auslösen wollen?
Fügen Sie diese auf Ihre XAML

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="Tap"> 
     <cmd:EventToCommand Command="{Binding EventTapCommand, Mode=OneWay}"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

und dann die RelayCommand definieren in Ihrem Ansichtsmodell

public RelayCommand EventTapCommand { get; private set; } 
public MainViewModel() 
{ 
    EventTapCommand = new RelayCommand(DoSomeCoolStuff); 
} 

Wenn Sie möchten, können Sie auch das ausgewählte Element aus der Liste übergeben, müssen Sie gerade eingestellt CommandParameter und definieren Sie Ihren RelayCommand mit dem Elementtyp. Ich vergesse die genaue Bindesyntax. Etwas wie:

<cmd:EventToCommand Command="{Binding EventTapCommand, Mode=OneWay}" CommandParameter="{Binding}"/> 

public RelayCommand<MyType> EventTapCommand { get; private set; } 
Verwandte Themen