繁体   English   中英

如何获取列表框的选定项绑定元素?

[英]How can I get a listbox's selected item binded element?

所以这是我的问题:我想从列表框中的选定元素中找到名为“ id”的绑定字符串。 这是我的.xaml:

<ListBox Name="lstView">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid/>                                   
                <TextBlock Text="{Binding id}"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我的C#发送数据以填充列表框:

var articles = root.data.movies.Select(m => new Article { Name = m.title, ImagePath = m.medium_cover_image, Year = m.year.ToString() }).ToList();
foreach (Article s in articles)
{
    this.lstView.Items.Add(new Article {id = m.id.ToString()});                                   
}

我尝试了各种不同的方案,但是什么都没有起作用:/

试试下面的代码

    if(lstView.SelectedItems.Count=0)
    {
      return;
    }
    var selectedItem=lstView.SelectedItem[0] as FrameWorkElement;
    var itemDataContext=selectedItem.DataContext as Article;
    if(itemDataContext!=null)
    {
        //do what you like with the object
        string idString=itemDataContext.id;
    }

我假设您没有使用MVVM。

您可以将代码添加到以下Dependency属性及其包装的后面:

    public Article SelectedArticle
    {
        get { return (Article)GetValue(SelectedArticleProperty); }
        set { SetValue(SelectedArticleProperty, value); }
    }

    // Using a DependencyProperty as the backing store for SelectedArticle.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SelectedArticleProperty =
        DependencyProperty.Register("SelectedArticle", typeof(Article), typeof(MainWindow), new PropertyMetadata(null));

在您的ListBox上添加

SelectedItem="{Binding SelectedArticle}"

每次更改选择时,都会通知SelectedArticle,您将可以轻松访问属性。

但是,尝试使用绑定到ObservableCollection的数据,而不是使用foreach遍历集合。

实际上,我找到了一种更简单的方法来完成此工作(无论如何,感谢您的帮助):

Article selectedArticle = lstView.SelectedItem as Article;

然后将任何字符串绑定到该元素,请调用:

selectedArticle.nameofthebindedstring            

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM