WPF - 将控件绑定到属性

时间:2013-06-14 13:49:35

标签: c# wpf

所有都在标题中,我想做类似的事情:

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

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

public ListBox CurrentListBox 
{
    get; 
    set;
}

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

我可以这样做吗?

2 个答案:

答案 0 :(得分:1)

你的xaml应该是

    <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>

编辑SelectedItems

(此代码未经过测试)

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");
        }
    }

答案 1 :(得分:0)

另一个人在尝试学习时也有类似的问题......

Take a look at this answer to help

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

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