所有都在标题中,我想做类似的事情:
<ListBox AssignTo="{Binding ListBoxControl}" ...
然后在我的ViewModel中有这样的属性:
public ListBox CurrentListBox
{
get;
set;
}
我想要的是轻松检索所选项目
我可以这样做吗?
答案 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>
(此代码未经过测试)
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”的属性将“绑定”到您的公开属性。