它不会改变属性,这是绑定(模式双向)
本文关键字:绑定 模式 改变 属性 | 更新日期: 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方法,否则更改将不会传播回源