发生了什么事是它不打印/绑定/发布到WPF表单文本框中的视图如果字符串是相同的。例如,如果我使用随机生成的字节数组,我将它作为一个字符串,然后它发布到视图。为什么AppendText依赖项属性在字符串相等时不打印?
这里是我的视图模型,视图,势必:
public class ViewModel : INotifyPropertyChanged
{
public StringBuilder Data
{
get { return _data; }
set
{
_data = value;
OnPropertyChanged("Data");
}
}
private Service service = new Service();
private StringBuilder _data;
public ViewModel()
{
service.BytesArrived += ServiceOnBytesArrived;
ThreadPool.QueueUserWorkItem(starupService);
}
private void starupService(object state)
{
service.Start();
}
private void ServiceOnBytesArrived(byte[] bytes)
{
var sBuilder = new StringBuilder();
foreach (var b in bytes)
{
sBuilder.Append(b.ToString() + ", ");
}
Data = sBuilder;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
这里的,如果随意使用而不是仅仅是印刷字节对我来说(服务工作正常:
public class Service
{
public void Start()
{
var random = new Random(DateTime.Now.Minute);
while (true)
{
//random.NextBytes(bytes);
for (int i = 0; i < 10; i++)
{
bytes[i] = 0;
Thread.Sleep(10);
}
//Thread.Sleep(100);
BytesArrived(bytes);
}
}
private byte[] bytes = new byte[10];
public event Action<byte[]> BytesArrived;
}
这里的依赖属性使用AppendText,我正在使用:
public static class TextBoxAttachedBehaviors
{
#region AppendText Attached Property
public static string GetAppendText(TextBox textBox)
{
return (string)textBox.GetValue(AppendTextProperty);
}
public static void SetAppendText(
TextBox textBox, string value)
{
textBox.SetValue(AppendTextProperty, value);
}
public static readonly DependencyProperty AppendTextProperty =
DependencyProperty.RegisterAttached(
"AppendText",
typeof(string),
typeof(TextBoxAttachedBehaviors),
new UIPropertyMetadata(null, OnAppendTextChanged));
private static void OnAppendTextChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
if (e.NewValue == null)
return;
TextBox textBox = d as TextBox;
textBox.AppendText(e.NewValue.ToString());
}
#endregion
}
该XAML:
<TextBox attachedBehaviors:TextBoxAttachedBehaviors.AppendText="{Binding TextBoxAppend}"/>
如果您有ReSharper,它将提供替换命名空间,例如, attachedBehaviors:
与实际附加行为的链接,在我的情况下是xmlns:attachedBehaviors="clr-namespace:Support.NetworkMonitor.AttachedBehaviors"
。
你可以在你设置AppendText的地方添加代码吗? –
@Sten Petrov我已经更新了包含XAML的答案。 – Contango