设置Binding的UpdateSourceTrigger属性值为 PropertyChanged。
4. 示例:
<TextBox Text="{Binding ModelNameSearch, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="TextChanged">
<i:InvokeCommandAction Command="{Binding TextChanged_ModelSearch}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
注:控件的EventTrigger,用绑定的形式实现,需要:
(1)先安装Behavior的依赖库:Microsoft.Xaml.Behaviors.Wpf。
(2)引用 xmlns:i="
http://schemas.microsoft.com/xaml/behaviors
"
(3)EventName 写事件触发事件,如上例“TextChanged” “ValueChanged” “LostFocus”...
(4)Command 写ViewModel中的RelayCommand,类似于Button的触发写法。
最近在做
WPF
项目,有一个需求是用户在
文本
框搜索的时候,弹出下拉框预测用户想输入的信息,一开始想用
TextBox
做,后来觉得写下拉框的UI太麻烦了,于是换了一种思路,改用ComboBox做,只要每次在
文本
改变时换一下他的ItemsSource即可。
一开始迟迟找
不
到ComboBox的
TextChanged
事件,用的是keyUp来做,每次keyUp时获取ComboBox中的
文本
内容,但是这样会有种种bug,后来用了
TextChanged
后完美解决。
TextBox
Base.TextChang
UpdateSourceTrigger有三个枚举,
第一个是Explicit,源
不
会更新除非你手动来操作。正因为这个原因,我在这个
TextBox
旁边添加了一个按钮,用于手动更新源。在
后台
代码中,我们看到点击事件处理方法里面只有两行代码,第一行获取目标控件的绑定,第二行调用UpdateSource()方法。
第二是LostFocus,对于Text绑定来说其实就是一个默认
值
。也就是说一旦目标控件失去焦点,源就会被更新。
第三是PropertyChanged,一旦绑定的属性
值
改变,源会立即更新。本例中
文本
改
<
TextBox
Grid.Row="5" Grid.Column="3" Text="{Binding XXX}" Grid.ColumnSpan="2" Margin="42,0,89,1" Style="{StaticResource XXStyle}" Height="39" VerticalAlignment="Bottom" >
<i:I...
问题描述:在某些输入场景下,如果输入框未输入
值
,则设置确认或者保存按钮
不
可用。可是
TextBox
输入框是默认失去焦点后绑定的
值
才发生改变。
解决办法:
设置Binding的UpdateSourceTrigger属性
UpdateSourceTrigger=LostFocus //默认
值
,失去焦点才绑定
值
UpdateSourceTrigger=PropertyChanged //
值
一发生改...
private void
textBox
_KeyDown(object sender, KeyEventArgs e)
string strMessage = "
textBox
_KeyDown Event:" + e.RoutedEvent + " " + "Key:" + e.Key;
if(listBox!=null)
MVVM中,VM实现
TextBox
为空时按钮
不
可操作,总是在失去焦点时才有反应,
不
是
实时
的,是因为
TextBox
的Text绑定默认UpdateSourceTrigger=LostFocus,改为UpdateSourceTrigger=PropertyChanged。
<
TextBox
x:Name="tbxSourceJson" Text="{Binding SourceJson,UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap" A
在
WPF
中,要实现`
TextBox
`控件的
文本
随`Slider`控件
值
的
变化
而同步,通常可以使用数据绑定技术,特别是当两个控件都关联到同一个数据模型(比如
ViewModel
)的时候。这里是一个简单的步骤:
1. 首先,在你的
ViewModel
中创建一个`double`类型的属性表示`Slider`的当前
值
,例如`private double sliderValue;`,并提供一个公共的getter和setter。
```csharp
public double SliderValue
get { return sliderValue; }
sliderValue = value;
OnPropertyChanged("SliderValue");
2. 在`XAML`文件中,绑定`
TextBox
`的`Text`属性到`SliderValue`,同时给`Slider`设置双向数据绑定,使其
值
改变时能更新`
TextBox
`。
```xml
<Slider x:Name="mySlider" Value="{Binding SliderValue, UpdateSourceTrigger=PropertyChanged}" />
<
TextBox
Text="{Binding SliderValue, UpdateSourceTrigger=PropertyChanged}" />
这里的`UpdateSourceTrigger=PropertyChanged`确保了当`Slider`
值
变化
时,会立即更新`
TextBox
`。
3. 如果你需要保证`Slider`
值
总是整数
值
,可以在`SliderValueChanged`事件中做处理,例如添加检查并取整。
```csharp
private void MySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
if (e.NewValue != null)
SliderValue = Math.Round(e.NewValue);
这样,`
TextBox
`的内容就会随着`Slider`的
值
变化
而
变化
,而且只有整数
值
会被显示。