它不会改变属性,这是绑定(模式双向)

本文关键字:绑定 模式 改变 属性 | 更新日期: 2023-09-27 18:15:57

我有一个文本框,我将它的text属性绑定到窗口的ModalView中的MainTxtBoxTxt属性。当MainTxtBoxTxt改变时,它会影响到TextBox,但是当TextBox的Text属性改变时,它不会影响到ModelView中的MainTxtBoxTxt。有什么问题吗?

<cstmTxtBox:CustomTextBox Grid.Row="0" TextWrapping="Wrap" FontSize="16" x:Name="TxtBox" cstmTxtBox:CustomTextBox.CaretIndex="{Binding Path=CaretIndex, Mode=TwoWay}" Text="{Binding Path=MainTxtBoxText,Mode=TwoWay}"   >

CustomTxtBox

public class CustomTextBox : TextBox
    {
        public CustomTextBox()
        {
        }
        public static  DependencyProperty CaretIndexProperty =DependencyProperty.RegisterAttached( "CaretIndex",typeof(int),typeof(CustomTextBox),new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsRender));
        public static void SetCaretIndex(UIElement element, int value)
        {
            element.SetValue(CaretIndexProperty, value);
        }
        public static int GetCaretIndex(UIElement element)
        {
            return (int)element.GetValue(CaretIndexProperty);
        }
    }

它不会改变属性,这是绑定(模式双向)

试试这个

Text="{Binding Path=MainTxtBoxText,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

使用如下:

<cstmTxtBox:CustomTextBox Grid.Row="0" TextWrapping="Wrap" FontSize="16" x:Name="TxtBox" cstmTxtBox:CustomTextBox.CaretIndex="{Binding Path=CaretIndex, Mode=TwoWay}" Text="{Binding Path=MainTxtBoxText,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"   >

默认文本框在焦点丢失时更新视图模型。指定UpdateSourceTrigger=PropertyChanged将在每次文本框中的文本发生变化时更新视图模型。

您的代码中缺少UpdateSourceTrigger属性,该属性指定了对数据的更改应如何反映在模型属性中。为了详细说明,UpdateSoruceTrigger属性有四个选项可供选择:-

Default—返回目标依赖属性的默认UpdateSourceTrigger值。它随控制而变化。

LostFocus -当焦点离开当前控件时,变化反映。

PropertyChanged -反映数据的变化。对于文本框,只要按下一个键,就会发生变化。

显式—顾名思义,它出现在命令中。您必须调用UpdateSource方法,否则更改将不会传播回源