在我开始解释我的问题之前,请注意我的目标框架是 .NET 3.5。
我有一个文本框,其文本绑定到 viewmodel 属性。我的要求是,当用户在文本框中输入内容(通过键盘和鼠标粘贴)时,应清除其中的任何垃圾字符,并应使用替换的字符串更新文本框[在下面的示例中,“s”将被替换'h']。
XAML代码:
<Style x:Key="longTextField" TargetType="{x:Type TextBoxBase}">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="AcceptsReturn" Value="True"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Border
Name="Border"
Padding="2"
Background="Transparent"
BorderBrush="LightGray"
BorderThickness="1">
<ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="Black"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<TextBox Grid.Column="1" Grid.Row="2" Text="{Binding Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" MinLines="3" TextWrapping="Wrap"
SpellCheck.IsEnabled="True" Style="{StaticResource longTextField}"></TextBox>
视图模型属性:
private string _value;
public string Value
{
get
{
return _value;
}
set
{
if (_value == value)
return;
_value = value;
//replaces 's' with 'h' and should update the textbox.
_value = _value.Replace('s','h');
RaisePropertyChanged(() => Value);
}
}
以上内容根本不适合我。视图模型属性设置器正在触发......该值正在被替换......但是文本框没有得到更新。令人困惑的是,这在 .Net4.0 上完美运行。
您知道为什么这不起作用吗?除了升级到 .NET 4.0 之外,还有什么潜在的解决方案可以解决这个问题?
我的要求:
用户可以键入以及将任何内容粘贴到多行文本框中。
文本可以包含垃圾,应该在它进入文本框之前进行更改。
在此先感谢,-迈克