1

我的员工列表中的每一项都有Post属性。该属性是Int64类型。另外,我有一些ObservableDictionary<Int64,String>作为静态属性。每个员工必须String按其键显示值。项目的数据模板Employe(我删除了多余的):

        <DataTemplate x:Key="tmpEmploye">
            <Border BorderThickness="3" BorderBrush="Gray" CornerRadius="5">
                <StackPanel Orientation="Vertical">                        
                    <TextBlock Text="{Binding Path=Post}"/>
                </StackPanel>
            </Border>                               
        </DataTemplate> 

但是这段代码显示了Int64值,而不是String. 获取静态字典的字符串:

"{Binding Source={x:Static app:Program.Data}, Path=Posts}"

我知道如何解决它的问题ComboBox,但我不知道TextBlock。因为ComboBox我写了它(它工作正常):

<ComboBox x:Name="cboPost" x:FieldModifier="public" Grid.Row="4" Grid.Column="1" HorizontalAlignment="Stretch"
          VerticalAlignment="Stretch" Margin="2" Grid.ColumnSpan="2" 
          ItemsSource="{Binding Source={x:Static app:Program.Data}, Path=Posts}" DisplayMemberPath="Value"
          SelectedValuePath="Key"
          SelectedValue="{Binding Path=Post, Mode=TwoWay}">            
</ComboBox>

但是我该如何解决呢TextBlock

4

1 回答 1

2

嗯,我确定我之前已经为这个场景开发了一些东西,但我不记得或找不到任何相关的东西!

IMO您可以使用转换器,因此您将Post(Int64)传递给转换器,它会从字典中返回字符串值,尽管它必须是一个更好的解决方案。

[ValueConversion(typeof(Int64), typeof(string))]    
public class PostToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // validation code, etc
        return (from p in YourStaticDictionary where p.Key == Convert.ToInt64(value) select p.Value).FirstOrDefault();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
    }
}

XAML:

<Window ...
    xmlns:l="clr-namespace:YourConverterNamespace"
    ...>
    <Window.Resources>
        <l:PostToStringConverter x:Key="converter" />
    </Window.Resources>
    <Grid>
        <TextBlock Text="{Binding Post, Converter={StaticResource converter}}" />
    </Grid>
</Window>
于 2012-11-16T18:46:13.263 回答