处理"项目选择"上的"视图模型"命令



我需要在单击ListView的项目时触发commandEvent存在于ViewModel中,不应在隐藏的代码中实现。

我目前正在使用命令在代码后面的EventSetter来处理它,但我在ViewModel中需要它。

简而言之,我想在单击列表中的项目后立即更改property1property2(存在于 ViewModel 中)的值。 请帮忙?

XAML

<ListView.ItemContainerStyle>
<Style TargetType= "ListViewItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="MyCommand"/>
</Style>
</ListView.ItemContainerStyle>

代码隐藏:

private voide MyCommand(object sender, MouseButtonEventArgs e)
{
ViewModel.property1 = true;
ViewModel.property2 = false;
}

视图模型项应具有一个布尔属性,指示是否选择了它。在项的选择状态更改时需要执行的任何代码都可以在属性 setter 中调用。

public class ViewModelItem : INotifyPropertyChanged
{
private bool selected;
public bool Selected
{
get { return selected; }
set
{
selected = value;
// fire PropertyChanged event
// add call optional additional code here
}
}
}

您可以将 ListViewItem 的IsSelected属性绑定到 ItemContainerStyle 中的该属性:

<ListView.ItemContainerStyle>
<Style TargetType= "ListViewItem">
<Setter Property="IsSelected" Value="{Binding Selected}"/>
</Style>
</ListView.ItemContainerStyle>

如果您有一个单选 ListView,并且只需要在单个选定项更改时收到通知,请向主视图模型添加适当的属性,并在其资源库中调用您的代码:

public class ViewModel : INotifyPropertyChanged
{
public ObservableCollection<ViewModelItem> Items { get; }
= new ObservableCollection<ViewModelItem>();
private ViewModelItem selectedItem;
public ViewModelItem SelectedItem
{
get { return selectedItem; }
set
{
selectedItem = value;
// fire PropertyChanged event
// add call optional additional code here
}
}
}

按如下所示绑定列表视图的选定项:

<ListView ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}" />

相关内容

  • 没有找到相关文章

最新更新