【发布时间】:2015-12-25 09:22:46
【问题描述】:
我有一个复杂的对象绑定到 DevExpress 网格,带有自定义 EditTemplate
<ControlTemplate x:Key="EditLine">
<StackPanel VerticalAlignment="Center">
<TextBox Text="{Binding RowData.Row.Value}"
Margin="2"
Visibility="{Binding RowData.Row.ParamType, Converter={StaticResource ValueTypeToVisibilityConverter}, ConverterParameter='TextBox'}" />
<CheckBox Visibility="{Binding RowData.Row.ParamType, Converter={StaticResource ValueTypeToVisibilityConverter}, ConverterParameter='CheckBox'}"
IsChecked="{Binding RowData.Row.Value}"
VerticalAlignment="Center"
HorizontalAlignment="Center" />
</StackPanel>
</ControlTemplate>
我的复杂对象值可以加密也可以不加密,所以该对象有一个属性 IsEncrypted(它是布尔值)。我的第一个想法是创建一个转换器来解密显示的值并在保存时对其进行加密,并仅将其绑定到另一个文本框,该文本框仅在布尔值为真时显示。
但是,使我的加密文本框可见性折叠并不能阻止绑定,并创建一些除了阻止窗口显示(我无法修改加密函数的行为,因为它在其他应用程序中使用了很多地方,它必须抛出例外)...
由于无法绑定ConverterParameter,如何实现我的目标?
【问题讨论】:
-
是否可以创建某种视图模型类并将此类绑定到您的 xaml?在视图模型类中,您可以有一个可以绑定到的“DisplayValue”属性。此属性可以检查原始值是否已加密,并且可以(连同其他属性)帮助您创建比“原始”数据更容易绑定的数据。
-
我怎么能忘记这个想法.. 谢谢,我围绕我的复杂对象创建了一个包装视图模型来处理这种情况!
-
好的,那么我将为此创建一个简短的答案