我的 View 中有一个简单的ListView:
<ListView x:Name="ObjectListView" HorizontalAlignment="Left" Height="105" Margin="253,268,0,0" VerticalAlignment="Top" Width="163" SelectionChanged="ObjectListView_SelectionChanged">
<TextBox Width="100"/>
<Button Width="100" Content="Test"/>
<Label Width="100" Content="Label"/>
</ListView>
在我的ViewModel中,我有一个ObservableCollection,它可以做几件事(与这个问题无关):
public ObservableCollection<Object> ObjectCollection
{
get { return _conversionCollection; }
set
{
if (_conversionCollection != value)
{
_conversionCollection = value;
RaisePropertyChanged("ObjectList");
}
}
}
最终,那些对象自然地落在了模型中(通过RaisePropertyChanged和一些函数的帮助,编辑:),但是我的问题是View和ViewModel之间的连接。
目前,我已经这样解决了(在View的后台代码中):
public MainWindow()
{
InitializeComponent();
_viewModel = (RibbonViewModel)base.DataContext;
}
private void ObjectListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
_viewModel.ObjectCollection.Clear();
foreach(Object item in ObjectListView.SelectedItems)
{
_viewModel.ObjectCollection.Add(item);
}
}
这不是很漂亮,所以我想正确地做。
最佳答案
您只需要将ListView
SelectedItems
绑定(bind)到ObservableCollection
,因此您的收藏集将使用该绑定(bind)自动更新。实际上,您不需要在后面的代码中添加他事件。
<ListView x:Name="ObjectListView" HorizontalAlignment="Left" Height="105" Margin="253,268,0,0" VerticalAlignment="Top" Width="163" SelectedItems="{Binding Path=ObjectCollection}">
<TextBox Width="100"/>
<Button Width="100" Content="Test"/>
<Label Width="100" Content="Label"/>
</ListView>
编辑
要实现您想要的,请尝试使用
Interaction triggers
,如下所示将下面的xmlns添加到您的XAML中
xmlns:i="http://schemas.microsoft.com/expression//2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
不要忘记添加该引用:
<ListView x:Name="ObjectListView" HorizontalAlignment="Left" Height="105" Margin="253,268,0,0" VerticalAlignment="Top" Width="163">
<TextBox Width="100"/>
<Button Width="100" Content="Test"/>
<Label Width="100" Content="Label"/>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<ei:ChangePropertyAction TargetObject="{Binding Mode=OneWay}" PropertyName="SelectedItems" Value="{Binding Path=SelectedItems, ElementName=ObjectListView}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
View 模型
public System.Collections.IList SelectedItems {
get {
return ObjectCollection;
}
set {
ObjectCollection.Clear();
foreach (var model in value) {
ObjectCollection.Add(model);
}
}
}
关于c# - 将所选项目写入ObservableCollection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34083312/