Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在运行时更改绑定模式?我能绑在上面吗?_.net_Wpf_Binding - Fatal编程技术网

.net 如何在运行时更改绑定模式?我能绑在上面吗?

.net 如何在运行时更改绑定模式?我能绑在上面吗?,.net,wpf,binding,.net,Wpf,Binding,我需要一种方法,在运行时根据一些值将绑定模式从单向更改为双向(主要是在项目可见时,我会将其设置为双向,否则为单向,类似于主/从控件) 这可以从xaml实现吗 提前感谢。您可以通过编程方式创建绑定,并在条件更改时重新创建它来实现这一点 我用以下方法重新绑定: private void OnTextBoxGotFocus(object sender, RoutedEventArgs e) { // don't allow to update textbox from

我需要一种方法,在运行时根据一些值将绑定模式从单向更改为双向(主要是在项目可见时,我会将其设置为双向,否则为单向,类似于主/从控件)

这可以从xaml实现吗


提前感谢。

您可以通过编程方式创建绑定,并在条件更改时重新创建它来实现这一点

我用以下方法重新绑定:

    private void OnTextBoxGotFocus(object sender, RoutedEventArgs e)
    {
        // don't allow to update textbox from source if it has focus
        ChangeBindingMode(sender as TextBox, BindingMode.OneWayToSource);
    }

    private void OnTextBoxLostFocus(object sender, RoutedEventArgs e)
    {
        ChangeBindingMode(sender as TextBox, BindingMode.TwoWay);
    }

    private void ChangeBindingMode(TextBox textbox, BindingMode mode)
    {
        if (textbox == null)
            return;
        Binding oldBinding = BindingOperations.GetBinding(textbox, TextBox.TextProperty);
        // It's not posible to change existing binding, but available to recreate it
        // oldBinding.Mode = mode;
        BindingOperations.ClearBinding(textbox, TextBox.TextProperty);
        Binding newBinding = new Binding(oldBinding.Path.Path);
        newBinding.Mode = mode;
        BindingOperations.SetBinding(textbox, TextBox.TextProperty, newBinding);
    }

如果它不可见,那么如果它是双向的,那又有什么关系呢?因为我绑定在一个网格的diplayindex上,并且在更改完成后,当我在可见网格上拖动一个列时,另一个网格在同一列上有一个不同的displayindex,并且正在还原该值。因此,我想在网格不可见时将displayindex绑定设置为单向。您是否得到了基于某些值在运行时将绑定模式从单向更改为双向的答案?是,这是不可能的,除非你按照公认的答案使用代码。这不是我想要的,但无论如何,我想要的是不可能的。