1
我有一個文本框,文本綁定到ViewModel中的屬性。用戶可以手動輸入文本或從剪貼板粘貼。 我解析了用戶輸入的文本(我使用UpdateSourceTrigger = PropertyChanged),並通過換行符char分隔文本。文本框值從Viewmodel更改不反映在UI
問題:當用戶點擊輸入時,一切工作正常。但是,當我嘗試處理粘貼的文本時,只要我首先看到「\ 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
請問您的ViewModel執行INotifyPropertyChanged? – Dmihawk
您是否嘗試在setter中的OnNewLineCommandEvent之後調用RaisePropertyChanged? –
是的,我的VM實現INotifyPropertyChanged-它被稱爲RaisePropertyChanged。是的,我在OnNewLineCommandEvent之後嘗試調用RaisePropertyChanged,但它沒有幫助 – RDV