2012-02-28 180 views
1

如何將事件處理程序綁定到我創建的自定義對象?綁定事件處理程序到自定義對象

這裏是我的XAML

<ListBox x:Name="ListData"> 
         <ListBox.ItemTemplate> 
          <DataTemplate> 
           <StackPanel Margin="0,0,0,30"> 
            <Image VerticalAlignment="Top" HorizontalAlignment="Left" Source="{Binding Path=TileImage}" Width="175" Height="175" /> 
            <TextBlock Margin="5" Width="200" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Left" Text="{Binding Path=TileName}" FontSize="25"/> 
           </StackPanel> 
          </DataTemplate>    
         </ListBox.ItemTemplate> 
        </ListBox> 

代碼隱藏

// Create collection 
    ImageTiles = new ObservableCollection<ImageTile>(); 

    // Create each object in the collection 
    ImageTile RSS= new ImageTile("RSS", "/Images/Hard.jpg"); 
    ImageTile test= new ImageTile("test", "/Images/Hard.jpg"); 
    ImageTile Exam= new ImageTile("Exam", "/Images/Hard.jpg"); 
    ImageTile Settings = new ImageTile("Settings", "/Images/Hard.jpg"); 

    ImageTiles.Add(RSS); 
    ImageTiles.Add(test); 
    ImageTiles.Add(Exam); 
    ImageTiles.Add(Settings); 

    this.ListData.ItemsSource = ImageTiles; 

我想該事件處理程序與每個ImageTile一起綁定。任何想法如何做? =)

+0

我可能錯過了它,但是你試圖綁定什麼事件處理程序? – Robaticus 2012-02-28 02:42:03

+0

@Robaticus我只是想將不同的事件綁定到不同的imageTile。就像第一個稱爲RSS的圖像一樣,當用戶點擊RSS圖標時,它應該導航到某個頁面,而第二個圖像應該導航到另一個頁面 – 2012-02-28 02:47:56

回答

1

根據你的代碼結構,我會回答假設你沒有使用MVVM之類的東西,但是我肯定會推薦Silverlight開發的模式。

儘管如此,您的數據源綁定將是這樣的:

<ListBox x:Name="ListData" ItemsSource="{Binding ImageTiles}"> 

</ListBox> 

你可以在你的代碼中創建一個單一的通用點擊後面的處理程序和圖片的點擊事件分配給該處理程序。

<ImageButton VerticalAlignment="Top" HorizontalAlignment="Left" Source="{Binding Path=TileImage}" Width="175" Height="175" Click="imageButton_Click" /> 

然後,您可以有專人負責重定向到任何所需的地方,特定的圖像平鋪在對象上的方法。然後在後面的處理程序代碼將類似於此:

private void imageButton_Click(object sender, RoutedEventArgs e) 
{ 
    var imageTile = ((ImageButton)sender).DataContext as ImageTile; 
    imageTile.RedirectSomewhere(); 
} 
+0

無後顧之憂。我能夠綁定物品。我只是想將不同的事件綁定到不同的imageTile。就像第一個叫做RSS的圖像一樣,當用戶點擊RSS圖標時,它應該導航到某個頁面,而第二個圖像應該導航到另一個頁面 – 2012-02-28 02:45:52

+0

我明白了,請查看我上面的編輯,希望有所幫助。 – KodeKreachor 2012-02-28 02:57:33

+0

感謝您的回覆=) 現在一切似乎都很棒。 – 2012-02-28 03:06:23

1

在你的ViewModel,添加屬性來捕捉選擇的項目(例如)

private ImageTile _selectedItem; 
public ImageTile SelectedItem 
{ 
    get {return _selectedItem;} 
    set 
    { 
     if(value != _selectedItem) 
     { 
       _selectedItem = value; 
       RaisePropertyChanged("SelectedItem"); 
     } 
    } 
} 

然後,在你的XAML,綁定的SelectedItem:

<ListBox ItemsSource="{Binding ImageTiles}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}"> 
</ListBox> 

使用MVVM Light(或其他方式)將SelectionChanged事件綁定到命令,或爲SelectionChanged事件連接事件處理程序。在您的Command(或事件處理程序)中,獲取SelectedItem,並查看第一個屬性(您沒有告訴我們它是什麼,所以我不知道該怎麼稱呼它)。

在做任何事情之前,請記住確保SelectedItem不爲空,並且在完成處理命令後,將SelectedIndex設置爲-1,以便他們可以選擇相同的項目兩次,要執行的功能。

+0

感謝回覆= D 這似乎更通用,因爲它也附加到課堂上。 從我在網上搜索的內容來看,主要是MVVM光〜 但是它使用了relaycommand>。< – 2012-02-28 03:09:05

相關問題