【发布时间】:2012-06-19 22:44:52
【问题描述】:
我正在尝试创建一个 CustomControl,该控件将具有受 ViewModel 中的枚举影响的各种属性。创建的 CustomControl 将在 View 中调用。
我希望枚举绑定能够更改控件中的一些内容,其中包括:
- 更改图像源(图像更改为在 CustomControl 库中创建的文件夹中的静态图像),
- 再次更改 TextBlocks Text 属性,文本选项将在 X 数量的情况之一之间是静态的(X 是可能的枚举状态的数量(也不会改变))。
请记住,这两个 DP 将被链接,例如如果绑定的枚举是 case x,图像源将改变和显示的文本。 基本上,这里暴露的两个 DP 会绑定到同一个枚举,但使用方式不同。
那么,我的问题是,携带上述物品的最佳方式是什么?
我已经想到了两种可能的方法:
- 公开有用的 DP 类型并将这些属性绑定到同一个枚举(例如 Property1="{Binding someEnum}" Property2="{Binding someEnum}"),还提供一个 ValueConvertor 将这些枚举转换为 CustomControl 可以使用的有用类型然后使用,
- 或者,公开一个接受枚举的 DP,然后根据绑定枚举的值更改 CustomControl 代码中其他位置的属性?
我对使用 Views 代码隐藏文件中的值转换器执行选项 1 相当满意。但是,我想避免这样做,因为它会使控件的独立性降低。
关于选项二,我不完全确定如何以这种方式进行操作,因此如果您认为这是可行的方法,文章或小解释会有所帮助 - 可能在 DP 上实现 INoitifyPropertyChanged,以便控件知道它的价值Bound 枚举改变时改变了吗?
另外,我不限于上述两种方式,如果您觉得有更好的方式,请提出建议!
我将 WPF (C#) 与 MVVM 架构 (MVVM Light Toolkit) 结合使用。
快速说明:我想避免更改 ViewModel - 除非绝对必要,否则公开的枚举和那里的所有逻辑都应该保持原样!
提前感谢您的回复,我将尝试尽可能多地更新此问题,回复和更新有关个人在此问题上的进展以及可能要求的额外信息!
【问题讨论】:
标签: c# wpf mvvm enums custom-controls