c# wpf mvvm 中怎么实现checkbox的checked和unchecked事件

baqizhu 2020-01-13 10:52:01
xaml文件中代码:

<ListView Name="LV" Grid.Column ="0" ItemsSource ="{Binding Structures}">
<ListView.ItemTemplate>
<DataTemplate>
<CheckBox Content ="{Binding Id}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding Structure_Onchecked}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<i:InvokeCommandAction Command="{Binding Structure_OnUnchecked}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

请问在viewmodel中怎么实现checked和unchecked事件
...全文
3058 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1

大佬,看了你们大神得对话,我还是不明白,通过属性绑定只是能显示出来是否选择了。但是点击后需要改变数据,他还是需要触发事件方法,不然我怎么改变状态呢。

baqizhu 2020-01-15
  • 打赏
  • 举报
回复
现在我就是想在viewmodel中实现绑定的command,并且能够传回checkbox控件
github_36000833 2020-01-15
  • 打赏
  • 举报
回复
引用 1 楼 JDD1997 的回复:
... CheckBox的IsChecked属性应该绑定到ViewModel类中的某个属性上,ViewModel通过这个属性的变化进行反应即可.
+1 如果用ICommand命令模式,每个ViewModel类要提供两个命令以供绑定,较繁琐也没太大必要。 JDD1997朋友建议的属性绑定,容易且代码更简单。
<ListView Name="LV" Grid.Column ="0" ItemsSource ="{Binding Structures}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding Id}" IsChecked="{Binding Selected}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.Structures = new List<My>() { new My("1"), new My("3"), new My("5"), };
        this.DataContext = this;
    }

    public List<My> Structures { get; private set; }
    public class My
    {
        public My(string id) { Id = id; }
        public string Id { get; set; }

        bool _selected;
        public bool Selected
        {
            get { return _selected; }
            set { _selected = value; MessageBox.Show(Id + " 勾选演示:" + _selected); }
        }
    }
}
JDD1997 2020-01-14
  • 打赏
  • 举报
回复
既然是mvvm模式,那么界面只是数据的展示/操作层,一般来说事件只是用来在View中触发动画 不要想着xx事件做xx事情, 那是winform的思维模式,正常情况下ViewMode甚至不应该知道View的存在,更不要谈如何去相应View中的事件 在mvvm模式中,数据才是中心,界面通过绑定与数据连接,并展示/修改数据 这里所说的数据都是类上的属性,而对属性的变化进行反应,应该不存在什么疑问吧? 具体到此例, CheckBox的IsChecked属性应该绑定到ViewModel类中的某个属性上,ViewModel通过这个属性的变化进行反应即可.

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧