我只是从Caliburn Micro开始。我想要一个带有字符串列表的组合框,当用户选择一个项目时,我想调用一些notify方法。应该很简单,对吧?我很不耐烦,并且谷歌搜索的5分钟还没有为我解决,所以请堆叠器进行救援!
注意:我喜欢一个答案,该答案向我展示了如何将其放入 View 模型。避免使用复杂的XAML是MVVM框架IMHO的重点。
最佳答案
Caliburn.Micro已支持基于ItemsControl
的约定(例如ComboBox或ListBox),这些控件使View中所需的xaml最小化。
首先,您具有标准约定,其中控件内容将绑定(bind)到与控件名称相同的ViewModel属性。对于ItemsControl
,控件的content属性为ItemsControl.ItemsSource
。使用Caliburn.Micro开箱即用的第二个约定是,将尝试将ItemsControl.SelectedItem
绑定(bind)到ViewModel属性,该属性具有控件的单数名称,使用“ Activity ”,“选定”或“当前”前置(请参见Caliburn.Micro源代码中的ConventionManager
)。
考虑到这一点,您可以在 View 中实现以下目标:
<ComboBox x:Name="Strings"></ComboBox>
并在您的ViewModel中:
public BindableCollection<string> Strings
{
get
{
// silly example of the collection to bind to
return new BindableCollection<string>(
new string[]{ "one", "two", "three"});
}
}
private string _selectedString;
public string SelectedString
{
get { return _selectedString; }
set
{
_selectedString= value;
NotifyOfPropertyChange(() => SelectedString);
// and do anything else required on selection changed
}
}
第一个约定选择控件名称(“字符串”),并将
ComboBox.ItemsSource
绑定(bind)到ViewModel属性Strings
。第二种约定首先将“字符串”单数化为“字符串”,并在“Selected”前添加属性“SelectedString”以将ComboBox.SelectedItem
绑定(bind)到该字符串。关于silverlight - 如何在Caliburn Micro中捕获组合框选择?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5837343/