WPF - 如何禁用基于对象 属性 的绑定?
WPF - How can I disable Binding based on object property?
我有一个复杂的对象绑定到 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(布尔值)。我的第一个想法是创建一个转换器来解密显示的值并在保存时对其进行加密,并将其仅绑定到另一个文本框,该文本框仅在布尔值为真时显示。
但是,使我的加密文本框可见性折叠并不会阻止绑定,并创建一些除了阻止 window 显示(我无法修改加密功能的行为,因为它在其他地方使用了很多地方应用程序,它必须抛出异常)...
因为ConverterParameter无法绑定,我该如何实现我的目标?
您可以创建自己的自定义 MultiBinding。将其绑定到值和 IsEncrypted,并在那里进行特殊处理(即,如果 IsEncrypted 为真,则忽略值)。
为了避免复杂的 XAML 标记检查原始数据的复杂条件,通常最好创建某种视图模型 class 并将此 class 绑定到XAML.
在视图模型 class 中,您可以有一个 "DisplayValue" 属性 可以绑定到。 属性 可以检查原始值是否加密,并且可以(连同其他属性)帮助您创建比 "raw" 数据更容易绑定的数据。
通过这样做,您可以更像“1:1”(控制 属性)从视图到视图模型的绑定。然后可以在视图模型中完成从原始数据到显示方式的转换。
我有一个复杂的对象绑定到 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(布尔值)。我的第一个想法是创建一个转换器来解密显示的值并在保存时对其进行加密,并将其仅绑定到另一个文本框,该文本框仅在布尔值为真时显示。
但是,使我的加密文本框可见性折叠并不会阻止绑定,并创建一些除了阻止 window 显示(我无法修改加密功能的行为,因为它在其他地方使用了很多地方应用程序,它必须抛出异常)...
因为ConverterParameter无法绑定,我该如何实现我的目标?
您可以创建自己的自定义 MultiBinding。将其绑定到值和 IsEncrypted,并在那里进行特殊处理(即,如果 IsEncrypted 为真,则忽略值)。
为了避免复杂的 XAML 标记检查原始数据的复杂条件,通常最好创建某种视图模型 class 并将此 class 绑定到XAML.
在视图模型 class 中,您可以有一个 "DisplayValue" 属性 可以绑定到。 属性 可以检查原始值是否加密,并且可以(连同其他属性)帮助您创建比 "raw" 数据更容易绑定的数据。
通过这样做,您可以更像“1:1”(控制 属性)从视图到视图模型的绑定。然后可以在视图模型中完成从原始数据到显示方式的转换。