我有一個表示 ASCII 字串的串列,我試圖讓它通過文本框進行編輯。我已經像這樣設定了系結:
public List<byte> ParamData;
var b = new TextBox();
b.DataContext = ParamData;
var binding = new Binding(".");
binding.Converter = new ListToStringConverter();
binding.Mode = BindingMode.TwoWay;
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
b.SetBinding(TextBox.TextProperty, binding);
internal class ListToStringConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
var orig = (List<byte>) value;
var res = Encoding.ASCII.GetString(orig.ToArray());
return res;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
var orig = (string) value;
var res = Encoding.ASCII.GetBytes(orig);
return new List<byte>(res);
}
}
但是,我發現更改 textbos 中的文本不會觸發 ConvertBack,并且 ParamData 實際上并沒有得到更新。我嘗試在文本框中的文本更改上觸發 UpdateSource(),但仍然沒有。
有任何想法嗎?
uj5u.com熱心網友回復:
您需要將系結源設定為可以通過系結更新的屬性。截至目前,系結使用整個物件作為其源,并且不能用完全不同的物件替換它(來自 ConvertBack 方法的新串列)
public class ByteListWrapper
{
public List<byte> ParamData { get; set; }
}
var b = new TextBox();
b.DataContext = new ByteListWrapper { ParamData = someData };
var binding = new Binding("ParamData")
{
Converter = new ListToStringConverter(),
Mode = BindingMode.TwoWay,
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
};
b.SetBinding(TextBox.TextProperty, binding);
再次如此:現在系結更新源屬性的值,而不是替換源(它不能這樣做)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/413840.html
標籤:
