我有一个包含ListView的MainView.xaml:
SELECT id, weight,
CASE WHEN id = 7 THEN @weight := weight
ELSE @weight
END AS compare_weight
FROM `TABLE`
HAVING weight >= compare_weight
ORDER BY weight ASC
支持模型MainViewModel.cs包含用于填充List的ObservableCollection:
<ListView x:Name="Conditions"/>
呈现列表中每个项目的ConditionView.xaml只是一个带有一些文本的复选框:
private ObservableCollection<ConditionViewModel> _conditions = new ObservableCollection<ConditionViewModel>();
public ObservableCollection<ConditionViewModel> Conditions
{
get { return _conditions; }
set
{
_conditions= value;
NotifyOfPropertyChange(() => Conditions);
}
}
//QUESTION: How do I call this function when a checkbox inside the ListView is checked/unchecked?
public void ConditionStateChanged(ICondition condition)
{
}
支持列表中每个项目的ConditionViewModel.cs如下所示:
<StackPanel>
<CheckBox x:Name="IsSelected"/>
<TextBlock x:Name="Description"/>
</StackPanel>
这是我的问题。每当在ListView中检查或取消选中某个项目时,我需要在包含ListView的MainViewModel.cs中执行一些操作。你可以看到我想在上面调用的函数,它名为ConditionStateChanged()。我怎么能以'正确'(Caliburn.Micro)的方式做到这一点。
目前,我能想到的是,从ConditionViewModel中的IsSelected属性内部发布一个C#事件,然后在父MainViewModel中订阅该事件。从事件'sender'参数,我会知道哪个ICondition对象触发了它,我可以调用我想要的:ConditionStateChanged()函数。这是正确的方法吗?感谢。