0

一切都在标题中,我想做类似的事情:

<ListBox AssignTo="{Binding ListBoxControl}" ...

然后在我的 ViewModel 中具有这样的属性:

public ListBox CurrentListBox 
{
    get; 
    set;
}

我想要的是轻松检索所选项目

我可以这样做吗?

4

2 回答 2

1

你的 xml 应该看起来像

    <ListBox
        ItemsSource="{Binding List}"
        SelectedItem="{Binding Item}"/>

你的属性应该看起来像

    private List<yourClass> list;
    public List<yourClass> List
    {
        get { return list; }
        set
        {
            list = value;
            RaisPropertyChanged("List");
        }
    }

    private yourClass item;
    public yourClass Item
    {
        get { return item; }
        set
        {
            item = value;
            RaisPropertyChanged("Item");
        }
    }

现在您只需要将 ViewModle 设置为 DataContext 并且有很多方法可以做到这一点

我使用一种非常简单的方法来创建一个 ResourceDictionary (VMViews.xaml)

<ResourceDictionary  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

                     xmlns:vm="clr-namespace:ProjectName.namespace"
                     xmlns:vw="clr-namespace:ProjectName.namespace" >

    <DataTemplate DataType="{x:Type vm:YourVMName}">
        <vw:YourVName/>
    </DataTemplate>
</ResourceDictionary>

在我的 App.xaml

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Path/VMViews.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

编辑选定项目

(此代码未经测试)

XAML

<ListBox
    ItemsSource="{Binding List}"
    SelectedItem="{Binding Item}" SelectionChanged="ListBox_SelectionChanged">
    <ListBox.Resources>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="IsSelected" Value="{Binding IsSelected}" />
        </Style>
    </ListBox.Resources>
</ListBox>

现在您yourClass需要实现该IsSelected属性

比你能做的事情

private yourClass item;
    public yourClass Item
    {
        get { return item; }
        set
        {
            item = value;
            RaisPropertyChanged("Item");

            SelectedItems = List.Where(listItem => listItem.IsSelected).ToList();
        }
    }

    private List<yourClass> selectedItems;
    public List<yourClass> SelectedItems
    {
        get { return selectedItems; }
        set
        {
            selectedItems = value;
            RaisPropertyChanged("SelectedItems");
        }
    }
于 2013-06-14T14:14:56.243 回答
0

另一个人在尝试学习时遇到了类似的问题......

看看这个答案来帮助

您的属性通过公共 getter/setter 公开(尽管 setter 可以是您的数据上下文对象私有的)。

然后,列表框“Items”的属性将“绑定”到您的公开属性。

于 2013-06-14T14:04:29.017 回答