You can probably use GraphicsLayer with custom symbol that gets a value from the graphic.Attributes.For example you can update this sample: http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#FeatureLayerSimple to include the following code:
<esri:SimpleRenderer x:Key="MyRenderer">
<esri:MarkerSymbol OffsetX="10" OffsetY="10">
<esri:MarkerSymbol.ControlTemplate>
<ControlTemplate>
<StackPanel>
<TextBlock Text="{Binding Attributes[CITY_NAME]}" />
</StackPanel>
</ControlTemplate>
</esri:MarkerSymbol.ControlTemplate>
</esri:MarkerSymbol>
</esri:SimpleRenderer>
<!--more code goes here-->
<esri:GraphicsLayer ID="MyGraphicsLayer" Renderer="{StaticResource MyRenderer}"/>
private void FeatureLayer_UpdateCompleted(object sender, EventArgs e)
{
var source = sender as FeatureLayer;
var target = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
foreach (var g in source.Graphics)
{
var graphic = new Graphic() { Geometry = g.Geometry };
foreach (var attribute in g.Attributes)
graphic.Attributes[attribute.Key] = attribute.Value;
target.Graphics.Add(graphic);
}
}