C# 在绑定前更改文本框值
给定下面这样一个简单的绑定C# 在绑定前更改文本框值,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,给定下面这样一个简单的绑定TextBox,是否有方法在绑定前/绑定时更改字符串 我正在将文本绑定到行筛选器。因此,对于用作“类似“%exampletext%”的数据的字符串,我希望用户只需要输入“exampletext”,然后在绑定之前将文本包装到另一个字符串中 <TextBox x:Name="Filter" Text="{Binding example, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 您可以尝试将完整的
TextBox
,是否有方法在绑定前/绑定时更改字符串
我正在将文本绑定到行筛选器。因此,对于用作“类似“%exampletext%”的数据的字符串,我希望用户只需要输入“exampletext”,然后在绑定之前将文本包装到另一个字符串中
<TextBox x:Name="Filter" Text="{Binding example, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
您可以尝试将完整的字符串存储在Viewmodel/code back中(例如“%exampletext%”之类的数据)
然后在文本框中使用一些自定义转换器。文本绑定在从代码编辑值时仅显示“exampletext”(将调用Convert方法),或在从UI设置值时在字符串值中写入“数据,如“%exampletext%”(将调用ConvertBack方法)正确的处理方法是在源(
示例
)属性的setter中
如果出于某种原因不想执行此操作,那么在设置源属性之前,最好先取消绑定,并处理视图中文本框
的文本更改事件:
private void Filter_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = (TextBox)sender;
string text = textBox.Text;
//modify the text...
string modifiedText = "...";
//...and set the source property
dynamic viewModel = textBox.DataContext;
viewModel.example = modifiedText;
}
XAML:
<TextBox x:Name="Filter" TextChanged="Filter_TextChanged" />
不存在“设置源属性之前”事件
另一种可能的解决方案是使用值转换器:。绑定到viewmodel中的过滤器字符串有效,然后在设置有效时对其进行更改
public string Filter
{
get { return _Filter; }
set {
MainVM.Modules.AllModules[0].Vwr.Table.dv.RowFilter = "PN LIKE '%" + _Filter + "%'";
_Filter = value; OnPropertyChanged(nameof(Filter)); }
}
private string _Filter = "";
为什么不像应该的那样在示例属性的setter中处理这个逻辑呢?我认为您想要的是所谓的水印。搜索“wpf文本框水印”,看看我是否正确。很抱歉,返回问题并给出解决方案。我没有集中精力阅读答案。