我有一个文本框,文本绑定到ViewModel中的属性。用户可以手动输入文本或从剪贴板粘贴。 我解析用户输入的文本(我使用 UpdateSourceTrigger = PropertyChanged )并按换行符分隔文本。
问题:当用户点击进入时,一切正常。但是当我尝试处理粘贴的文本时,只要我第一次看到" \ n",我会尝试将其分解为不同的字符串并清除文本框。在ViewModel中,文本设置为string.empty,但它不会反映在UI上。
代码有什么问题?我知道在自己的setter属性中编辑文本不是很好的编码实践,但我怎么能这样做呢?
以下是代码段:
XAML
<TextBox AcceptsReturn="True" VerticalAlignment="Stretch" BorderBrush="Transparent"
Text="{Binding TextBoxData, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding OnNewLineCommand}"/>
</TextBox.InputBindings>
</TextBox>
视图模型:
public string TextBoxData
{
get
{
return _textBoxData;
}
set
{
_textBoxData = value;
RaisePropertyChanged("TextBoxData");
if(_textBoxData != null && _textBoxData.Contains("\n"))
{
OnNewLineCommandEvent(null);
}
}
}
public DelegateCommand<string> OnNewLineCommand
{
get
{
if (_onNewLineCommand == null)
{
_onNewLineCommand = new DelegateCommand<string>(OnNewLineCommandEvent);
}
return _onNewLineCommand;
}
}
private void OnNewLineCommandEvent(string obj)
{
if (_textBoxData != null && _textBoxData.Length > 0)
{
List<string> tbVals = _textBoxData.Split('\n').ToList();
foreach (string str in tbVals)
{
ListBoxItems.Add(new UnitData(str.Trim()));
}
TextBoxData = string.Empty;
}
}
谢谢,
RDV
答案 0 :(得分:0)
我想出了这个问题。如果我尝试在其setter中修改文本框值并且未更改值,则不会在UI上反映出来。下面可能有助于更好地解释这一点:
解决方案:在VM中,不是将值设置回“ABC”,而是将其设置为“ABC”(注意附加空格) - &gt;这将改变UI值。
更新的虚拟机代码:
private bool _isTextValChanged = false;
private void OnNewLineCommandEvent(string obj)
{
if (_textBoxData != null && _textBoxData.Length > 0)
{
List<string> tbVals = _textBoxData.Split('\n').ToList();
foreach (string str in tbVals)
{
ListBoxItems.Add(new UnitData(str.Trim()));
}
//This will toggle textbox value and updated value will be reflected on the UI.
if (_isTextValChanged)
TextBoxData = " ";
else
TextBoxData = string.Empty;
_isTextValChanged = !_isTextValChanged;
}
}
谢谢,
RDV