- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们的应用程序中,我们有一个非常大的数据集,用作 ComboBox 列表等的数据字典。这些数据是静态缓存的,并与 2 个变量绑定(bind),所以我认为编写一个派生自的控件是明智的ComboBox 并将 2 个键公开为 DP。当这 2 个键具有正确的值时,我会从它对应的数据字典列表中自动设置 ComboBox 的 ItemsSource。我还自动将构造函数中的 SelectedValuePath 和 DisplayMemberPath 分别设置为代码和描述。
以下是数据字典列表中 ItemsSource 中的项目始终看起来如何的示例:
public class DataDictionaryItem
{
public string Code { get; set; }
public string Description { get; set; }
public string Code3 { get { return this.Code.Substring(0, 3); } }
}
Code的值总是4个字符长,但有时我只需要绑定(bind)3个字符。因此,Code3 属性。
下面是代码在我的自定义组合框中如何设置 ItemsSource:
private static void SetItemsSource(CustomComboBox combo)
{
if (string.IsNullOrEmpty(combo.Key1) || string.IsNullOrEmpty(combo.Key2))
{
combo.ItemsSource = null;
return;
}
List<DataDictionaryItem> list = GetDataDictionaryList(combo.Key1, combo.Key2);
combo.ItemsSource = list;
}
现在,我的问题是,当我将 XAML 中的 SelectedValuePath 更改为 Code3 时,它不起作用。我绑定(bind)到 SelectedValue 的内容仍然从 DataDictionaryItem 获取完整的 4 个字符的代码。我什至尝试在 SelectedValuePath 更改且没有骰子时重新运行 SetItemsSource。
任何人都可以看到我需要做什么来让我的自定义组合框唤醒并使用提供的 SelectedValuePath(如果它在 XAML 中被覆盖)吗?在我的 SelectedValue 绑定(bind)业务对象中调整属性 setter 中的值不是一个选项。
下面是 XAML 如何在表单中查找我的组合框:
<c:CustomComboBox Key1="0" Key2="8099" SelectedValuePath="Code3" SelectedValue="{Binding Thing}"/>
编辑:我只是窥探了我的代码,它说我的 SelectedValuePath 是 Code...它似乎从未设置为 Code3...Zuh?
最佳答案
好的,我明白了。
显然,在 WPF 控件的默认非静态构造函数中设置 DependencyProperty 的默认值是一个禁忌。所以,起初我试过这个:
static ValueCodeListComboBox()
{
SelectedValuePathProperty.OverrideMetadata(typeof(ValueCodeListComboBox), new PropertyMetadata("Code"));
DisplayMemberPathProperty.OverrideMetadata(typeof(ValueCodeListComboBox), new PropertyMetadata("Description"));
}
但这一直抛出一个错误说:
元数据覆盖和基础元数据必须是同一类型或派生类型。
最后发现这意味着我需要使用 FrameworkPropertyMetadata 而不是 PropertyMetadata:
static ValueCodeListComboBox()
{
SelectedValuePathProperty.OverrideMetadata(typeof(ValueCodeListComboBox), new FrameworkPropertyMetadata("Code"));
DisplayMemberPathProperty.OverrideMetadata(typeof(ValueCodeListComboBox), new FrameworkPropertyMetadata("Description"));
}
现在在 XAML 中更改 SelectedValuePath 效果很好。
关于WPF 派生 ComboBox SelectedValuePath 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405473/
在我们的应用程序中,我们有一个非常大的数据集,用作 ComboBox 列表等的数据字典。这些数据是静态缓存的,并与 2 个变量绑定(bind),所以我认为编写一个派生自的控件是明智的ComboBox
我正在尝试将 Dictionary 绑定(bind)到 WPF 应用程序中的 ComboBox。 SortedDictionary result = new SortedDictionary(); (
以下之间有什么区别: SelectedItem SelectedValue SelectedValuePath 所有这些依赖属性都在 Selector 中定义。类(class)。我经常将 Select
如何使用 Linq To Sql 将值和键绑定(bind)到列表框? 我正在使用 linq to sql 类填充列表框,这是 WPF: 下面显示了 FullName 而不是 Case_Number:
我正在努力寻找为什么我的 SelectedValuePath 没有导致我的组合框将 double 值传递到我的 View 模型属性 DelayLength。当我在执行期间更改组合框选择时,组合框变为红
我一直在努力解决这些组合框属性 显示成员路径 选定值 选定的值路径 我正在构建一个主详细信息表单。 组合框中充满了客户 用户在组合中选择客户 所有文本框 EG 均正确填写 我遇到的问题我已经让它工作了
我确实在数据绑定(bind)和 MVVM 方法论方面苦苦挣扎,尽管我喜欢这个概念,但我只是在苦苦挣扎。我为它创建了一个 WPF,它有多个组合框和一个按钮。第一个组合框将列出数据库实例名称。单击按钮后将
调试一个奇怪的 NullRefException 我看到下图: 所以当代码指的是.SelectedValue它崩溃了。 我无法理解 .SelectedItem可以设置,但是.SelectedValue
我是一名优秀的程序员,十分优秀!