Во-первых, я бы порекомендовал не использовать статические члены, просто кажется, что без него лучше работать.
Незначительные изменения в ShoppingListItems:
public class ShoppingListItems
{
public ObservableCollection<Item> ItemCollection { get; set; }
public ShoppingListItems()
{
ItemCollection = new ObservableCollection<Item>();
AddAnItem("test");
AddAnItem("test2");
AddAnItem("test3");
}
public void AddAnItem(string name)
{
ItemCollection.Add(new Item()
{
ItemName = name
});
}
}
Все не является статичным, а List <>вместо этого используется ObservableCollection <>.
В xaml:
<Grid>
<Grid.Resources>
<DataTemplate x:Key="itemLayout" DataType="{x:Type local:Item}">
<TextBlock Text="{Binding ItemName}" FontSize="50" />
</DataTemplate>
</Grid.Resources>
<ListBox x:Name="itemsListBox" Margin="2" ItemsSource="{Binding}"
ItemTemplate="{DynamicResource itemLayout}"
IsSynchronizedWithCurrentItem="True">
</ListBox>
</Grid>
В коде (файл .cs, соответствующий файлу xaml):
private ShoppingListItems _shoppingList;
public MainWindow()
{
InitializeComponent();
_shoppingList = new ShoppingListItems();
itemsListBox.DataContext = _shoppingList.ItemCollection;
}
РЕДАКТИРОВАТЬ:
То, что я сделал, было поместить шаблон данных в ресурсы сетки, а шаблон данных как часть ресурсов списка.Насколько я могу судить, единственная реальная разница заключается в том, что если шаблон является частью ресурсов сетки, его можно использовать в нескольких местах.Скажем, вы хотели два списка покупок, может быть, один для вещей, которые вам нужны, и другой для вещей, которые вы уже купили, и вы хотели, чтобы они форматировались одинаково, было бы лучше поместить шаблон в сетку, чтобы оба списка могли ссылаться на него,Поскольку у вас есть только один список, это, вероятно, не имеет значения, в любом случае это нормально.
Что касается паттерна синглтона, см. Синглтон в Википедии
Самый простой подходваши ShoppingListItems будут выглядеть так:
public class ShoppingListItems
{
private static ShoppingListItems _instance = new ShoppingListItems();
public ObservableCollection<Item> ItemCollection { get; private set; }
public static ShoppingListItems Instance { get { return _instance; } }
private ShoppingListItems()
{
ItemCollection = new ObservableCollection<Item>();
AddAnItem("test");
AddAnItem("test2");
AddAnItem("test3");
}
public void AddAnItem(string name)
{
ItemCollection.Add(new Item()
{
ItemName = name
});
}
}