[英]Converting a Hex String (from WPF TextBox) into byte
我编写小型WPF应用程序。 在我的应用程序中,我有一个名为Seq
字段,它实际上是字节数据。
因此,应该通过WPF应用程序的TextBox
更新Seq
字段。 但是文本字符串将以十六进制格式键入,且不以0x开头。
基本上,我需要写下算法以完成Seq
的set方法,以仅设置一个字节的数据。
通过文本框更新的对象类:
public class WProtocol {
private byte _seq
public byte Seq {
get {
return _seq;
}
set {
_seq = value;
}
}
}
WFrameWindow.xaml.cs
:
public partial class WFrameWindow: Window {
WProtocol m_WProtocol = new WProtocol();
public WFrameWindow() {
InitializeComponent();
this.DataContext = m_WProtocol;
}
}
WFrameWindow.xaml
代码片段,用于显示源代码的绑定:
<TextBox HorizontalAlignment="Left" Height="24" Margin="115,26,0,0" TextWrapping="Wrap" Text="{***Binding Seq,Mode=OneWayToSource , UpdateSourceTrigger=PropertyChanged***}" VerticalAlignment="Top" Width="99" FontSize="9" FontFamily="Arial"/>
您的解决方案是;
private string _seq_string;
public string SeqString
{
get { return _seq_string; }
set
{
_seq_string = value;
SeqBytes = StringToByteArray(value);
}
}
public byte[] SeqBytes { get; set; }
public static byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
和XAML代码将是:
<TextBox HorizontalAlignment="Left" Height="24" Margin="115,26,0,0" TextWrapping="Wrap" Text="{***Binding SeqString,Mode=OneWayToSource , UpdateSourceTrigger=PropertyChanged***}" VerticalAlignment="Top" Width="99" FontSize="9" FontFamily="Arial"/>
我建议的答案是使用转换器而不是ViewModel中的代码:
XamlCode:
<TextBox HorizontalAlignment="Left" Height="24" Margin="115,26,0,0" TextWrapping="Wrap"
Text="{Binding Seq, Converter={StaticResource StringToByteConverter}, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Top" Width="99" FontSize="9" FontFamily="Arial"/>
转换器:
class StringToByteConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is String)
{
string valueTyped = (String)value;
if (String.IsNullOrEmpty(valueTyped) == false && valueTyped.Length <= 2)
return System.Convert.ToByte(valueTyped, 16);
}
return new byte();
}
}
要使用转换器,请将其添加到参考资料中:
...
xmlns:local="clr-namespace:MyProject"
...
<Application.Resources>
<local:StringToByteConverter x:Key="StringToByteConverter"/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.