Einfache WPF-DataBinding an eine ListBox an eine ObservableCollection von strings
Okay, ich verstehe es einfach nicht. Bitte sagen Sie mir, warum bekomme ich keine Einträge in meiner ListBox (sollten die beiden strings "leer" und "Zeug" jetzt ):
XAML:
<Window.DataContext>
<Windows:SettingsWindowModel x:Name="model"/>
</Window.DataContext>
<Window.Resources>
<DataTemplate x:Key="ListItemTemplate">
<ListBoxItem Content="{Binding}" />
</DataTemplate>
</Window.Resources>
<ListBox Name="listBoxActivities" SelectionChanged="ListBoxActivitiesSelectionChanged"
ItemsSource="{Binding Path=IgnoredActivities}"
HorizontalAlignment="Left" VerticalAlignment="Top" MinHeight="40" MinWidth="200"
Padding="5,100,5,0" Height="100" Margin="0,207,0,0" ItemTemplate="{StaticResource ListItemTemplate}" />
In SettingsWindowModel:
private ObservableCollection<String> _ignoredActivities;
public ObservableCollection<String> IgnoredActivities
{
get
{
if (_ignoredActivities == null)
{
//empty
_ignoredActivities = new ObservableCollection<String>() { "empty","stuff" };
}
return _ignoredActivities;
}
}
Nichts mehr, das Sie wissen müssen? Was habe ich vergessen?
BEARBEITEN:
Vielleicht sollte ich hinzufügen, dass VisualStudio + ReSharper auch zeigen, keine Unterstreichungen und Fehler bei der Kompilierung. Nicht einmal Warnungen.
- Modell muss eine Eigenschaft, dh, eine {get; set;}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sorry Leute, der Daten war die ganze Zeit dort. Das problem war in dem visuelle details. Die Polsterung bekam auch angewendet, um eine sub-container der ListBox (oder die Elemente), daher die Elemente waren nicht, sitzen an der Spitze der Liste. Da habe ich aber eine Höhe, auf der der ListBox werden die Elemente waren immer unterhalb der sichtbaren Höhe des ListBox -. Stange, was zu Debuggen. Danke für Eure Antworten trotzdem!
1), die Sie nicht benötigen, um das DataTemplate
2) Sind Sie sicher, dass der DataContext der view (aaaaa.xaml.cs) ist die ViewModel (bbbbb.cs, enthält IgnoredActivities)?
Es sollte wie folgt sein:
aaaaa.xaml:
aaaaa.xaml.cs:
bbbbb.cs :
Mit dieser Erklärung Sie eine Bindung zu einer Eigenschaft "IgnoredActivities" in ein Steuerelement mit dem Namen "Modell" zu Ihrem Fenster.
Beim arbeiten mit ViewModels, setzen Sie Sie als DataContext deiner Kontrolle:
Einer Bindung mit keine Quelle angegeben ("{Binding PathToMyPropert}") hat die Standardaktion des Steuerelements DataContext, das ist geerbt von den Eltern kontrolliert. Also in Ihrem Fall könnten Sie festlegen, dass Ihr ViewModel zu Ihrem Fenster DataContext so wird es allen seinen Kindern:
Loswerden, dass
ElementName
Bindung-Eigenschaft. Es ist verwendet, um zu binden-WPF-Steuerelemente. EinfachItemsSource={Binding IgnoredActivities}
Versuchen Sie es wie folgt:
Versuchen Sie auch die Einstellung der DataContext für das control im code behind.
Stellen Sie sicher, dass die DataContext enthält IgnoredActivities und binden ItemsSource es: