WPF - 如何根据对象属性禁用Binding?

时间:2015-09-28 07:35:56

标签: c# wpf binding converter

我有一个绑定到DevExpress网格的复杂对象,带有自定义的EditTemplate

describe('myDirective', function () {
    var $scope, compile, element;

    beforeEach(module('myApp'));

    beforeEach(inject(function ($rootScope, $compile) {
        $scope = $rootScope.$new();
        element = angular.element("<section my-directive></section>");
        $compile(element)($scope);
        $scope.$digest();
    }));

    it('should initialise step1', function (){
        var sub_scope = $scope.$new();
        sub_scope.$emit('step1');
        expect($scope.hidden).toBeFalsy();
        expect($scope.shown).toBeFalsy();
    });
});

我的复杂对象值可以加密或不加密,因此该对象具有属性IsEncrypted(它是布尔值)。我的第一个想法是创建一个转换器来解密显示的值并在保存时对其进行加密,并将其仅绑定在另一个文本框中,该文本框仅在布尔值为真时显示。

然而,使我的加密文本框visiblity折叠不会阻止绑定,并创建一些除了阻止窗口显示(我不能修改加密函数的行为,因为它在其他应用程序中使用了很多地方,它必须抛出例外)...

因为无法绑定ConverterParameter,我怎样才能达到目标?

2 个答案:

答案 0 :(得分:1)

为了避免复杂的XAML标记检查原始数据的复杂条件,通常最好创建某种视图模型类并将此类绑定到XAML。

在视图模型类中,您可以拥有一个可以绑定到的“DisplayValue”属性。此属性可以检查原始值是否已加密,并且可以(与其他属性一起)帮助您创建数据,比“原始”数据更容易绑定。

通过这样做,您更像是从视图到视图模型的“1:1”(控制到属性)绑定。然后,可以在视图模型中完成从原始数据到其显示方式的转换。

答案 1 :(得分:0)

您可以创建自己的自定义MultiBinding。将它绑定到Value和IsEncrypted,并在那里进行特殊处理(即如果IsEncrypted为真,则忽略值)。