問題の説明を始める前に、ターゲットフレームワークが.NET3.5であることに注意してください。
テキストがviewmodelプロパティにバインドされているテキストボックスがあります。私の要件は、ユーザーがテキストボックスに(キーボードとマウスの貼り付けを介して)何かを入力するときに、その中のすべてのジャンク文字をクリーンアップし、テキストボックスを置き換えられた文字列で更新する必要があることです[以下の例では's'が置き換えられます'h'を使用]。
XAMLCode:
<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>
ViewModelプロパティ:
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にアップグレードする以外に、この問題の潜在的な解決策は何か知っていますか?
私の要件:
ユーザーは、複数行のテキストボックスに何でも入力および貼り付けることができます。
テキストには、テキストボックスに表示される前に変更する必要のあるジャンクを含めることができます。
よろしくお願いします、-マイク