Ich habe die folgende Windows RT-App. Ich binde eine Liste von Strings an ein ItemsControl von TextBlocks. Dadurch werden die leeren Zeichenfolgen als "System.Collections.Generic.List'1 [System.String]" anstelle nur einer leeren Zeichenfolge angezeigt. Ich möchte, dass es eine leere Zeichenfolge anstelle des Typs des DataContext anzeigt.TextBlock-Bindung zeigt den Klassennamen anstelle der leeren Zeichenfolge an
Code hinter:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
DataContext = new List<string>() { "", "not empty string" };
}
}
XAML:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" FontSize="25"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
Ausgang:
System.Collections.Generic.List'1[System.String]
non empty string
Ich habe das gleiche Beispiel mit traditionellen wpf und es zeigt die leeren Zeichenfolge korrekt.
Bearbeiten Dies gibt das gleiche aus.
Code hinter:
public class Model
{
private readonly List<string> items = new List<string>() { "", "non empty string" };
public List<string> Items
{
get { return items; }
}
}
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
DataContext = new Model();
}
}
XAML:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<ItemsControl ItemsSource="{Binding Path=Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" FontSize="25"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
Ich habe es nicht getestet, aber es scheint wie ein Fehler in der Plattform, Aber wie auch immer - das scheint nicht der typische Mainstream-Weg zu sein, Bindungen zu verwenden. Personen legen ItemsSource entweder direkt auf eine Auflistung fest oder verwenden einen Ansichtsmodelltyp, der eine Auflistungseigenschaft freigibt, die Sie dann an ItemsSource Ihres ItemsControl binden würden. Ich habe noch nie jemanden gesehen, der einen DataContext zu einer Sammlung gesetzt hat oder einen guten Grund dafür gesehen hat. –
Dies ist nur ein Beispiel. Die Anwendung, die ich erstelle, weist den DataContext einem ViewModel zu, das eine Eigenschaft vom Typ List hat. –