【问题标题】:Handling an ViewModel command on Item Select处理 Item Select 上的 ViewModel 命令
【发布时间】:2019-10-22 11:44:41
【问题描述】:

我需要在我的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;
}

【问题讨论】:

  • 看看现有的thread,别忘了创建你的虚拟机
  • 只是澄清一下,该命令不应该实现项目的选择?
  • 正如 Clemens 所写...你为什么不使用 ListView 的 SelectedItem 呢?
  • @Clemens 我需要在单击项目后立即设置某些属性的值,所以我正在使用命令来执行此操作。
  • @Selvin 我正在尝试但失败了。你能举个例子解释一下吗?

标签: c# wpf listview viewmodel


【解决方案1】:

您的视图模型项应该有一个布尔属性来指示它是否被选中。任何需要在 item 的选择状态发生变化时执行的代码都可以在属性 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 的 SelectedItem:

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

【讨论】:

  • 好的,这会告诉我们什么?我们对您的视图模型一无所知,那么我们应该如何进行?
猜你喜欢
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多