我正在为一个新项目尝试 caliburn.micro 框架,但我坚持绑定(bind)一个 ListPicker(工具包中的那个)。当我将控件更改为简单的 DropDown 时,一切都按预期进行。 我假设 DropDown 工作正常,因为实现了默认约定 here :
AddElementConvention<Selector>(Selector.ItemsSourceProperty, "SelectedItem", "SelectionChanged")
.ApplyBinding = (viewModelType, path, property, element, convention) => {
if (!SetBinding(viewModelType, path, property, element, convention))
return false;
ConfigureSelectedItem(element, Selector.SelectedItemProperty,viewModelType, path);
ApplyItemTemplate((ItemsControl)element, property);
return true;
};
ListPicker 没有实现 Selector,所以我尝试在我的 Bootstrap 中添加自定义约定:
static void AddCustomConventions() {
AddElementConvention<ListPicker>(ListPicker.ItemsSourceProperty, "SelectedItem", "SelectionChanged")
.ApplyBinding = (viewModelType, path, property, element, convention) => {
ConventionManager.ConfigureSelectedItem(element, ListPicker.SelectedItemProperty,viewModelType, path);
return true;
};
}
不幸的是,那行不通。你能帮忙吗?
最佳答案
我用这个约定解决了我的问题。
ConventionManager.AddElementConvention<ListPicker>(ListPicker.ItemsSourceProperty, "SelectedItem", "SelectionChanged")
.ApplyBinding = (viewModelType, path, property, element, convention) =>
{
if (ConventionManager.GetElementConvention(typeof(ItemsControl)).ApplyBinding(viewModelType, path, property, element, convention))
{
ConventionManager.ConfigureSelectedItem(element, ListPicker.SelectedItemProperty, viewModelType, path);
return true;
}
return false;
};
此外,还有一个问题。我的 SelectedItem 属性返回 null 但我的 Items 属性不包含 null 值。我得到一个异常,所选项目无效,因为它不在列表中。
关于c# - WP7 上 ListPicker 的 caliburn.micro 绑定(bind)约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6729704/