簡體   English   中英

單擊按鈕時如何從列表框中獲取綁定的項目

[英]How to get the binded Item from a listbox when a button is clicked

我有一個ListBox控件,其中包含許多項(這些是UserControls), ItemsSource綁定到ObservableCollection 所有這部分都運行良好,ListBox根據需要顯示集合中的每個項目。

但是,我想在每個用戶控件旁邊放置一個“刪除”按鈕,以便當用戶單擊該按鈕時,該項目將從列表中刪除。 經過一些研究,以及我自己解決這個問題的幾次嘗試,我目前得到了以下代碼:

XAML:

<ListBox ItemsSource="{Binding Path=MyItems}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <c:MyControl Text="{Binding Path=ItemText}" />
                <c:CustomButton Text="Remove" Click="RemoveButton_Click"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

.CS:

public ObservableCollection<MyItem> MyItems { get; set; }

private void RemoveButton_Click(object sender, RoutedEventArgs e)
{
    var button = sender as CustomButton;
    var item = button.DataContext as MyItem;
    MyItems.Remove(item);
}

我遇到的問題是item是null,原因是button.DataContext的類型是CustomButton ,因為我期望它是MyItem類型。

我錯過了什么,以便按鈕DataContext將是正確的MyItem對象? 或者還有什么我可以用來從click事件中獲取綁定項目? 是什么原因導致DataContext引用自身?

根據OP的要求:

您的CustomButton在XAML中將其DataContext設置為自身:

<Button x:Class="My.CustomButton"
        ...
        DataContext="{Binding RelativeSource={RelativeSource Self}}">
   <!-- ... -->
</Button>

或在代碼中:

public CustomButton()
{
   DataContext = this;
}

這是錯的。 刪除它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM