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文本框水印”,看看我是否正确。很抱歉,返回问题并给出解决方案。我没有集中精力阅读答案。