wpf绑定和hexa中的stringformat

时间:2013-12-18 15:46:28

标签: c# wpf

我将以下列表绑定到字节列表:

<ListView ItemsSource="{Binding Payload}" VerticalAlignment="Center" BorderBrush="Transparent">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding StringFormat=0x{0:x2}}" Margin="2,1,2,1" MinWidth="25" MinHeight="20" VerticalAlignment="Center" HorizontalAlignment="Center"/>
        </DataTemplate>
    </ListView.ItemTemplate>
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal"></WrapPanel>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>

Payload是一个ObservableCollection。我得到了值并以hexa显示它们,但我希望这是一个双向模式。起初我得到像0x00这样的值,但是我想修改那个值,让我们在0xff中说,然后把它放回Payload集合中,如255。 我想我需要一个转换器,但我需要一些帮助。

1 个答案:

答案 0 :(得分:1)

正如评论者提到的那样,您可以使用IValueConverter。试试这个:

public class ByteToHexadecimalConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || targetType != typeof(string)) return DependencyProperty.UnsetValue;
        byte byteValue = 0;
        if (!byte.TryParse(value.ToString(), out byteValue)) return DependencyProperty.UnsetValue;
        return byteValue.ToString("x2");
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || targetType != typeof(byte)) return DependencyProperty.UnsetValue;
        string stringValue = value.ToString();
        byte returnValue = 0;
        try { returnValue = System.Convert.ToByte(stringValue, 16); }
        catch { return DependencyProperty.UnsetValue; }
        return returnValue;
    }
}

您可能需要根据您的具体要求稍微调整一下,但这一切都很容易理解。您可以在MSDN上的IValueConverter Interface页面上找到有关IValueConverter的更多信息。