App.cs {
#if DEBUG
if (System.Diagnostics.Debugger.IsAttached)
{
this.DebugSettings.EnableFrameRateCounter = true;
}
#endif
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();
var viewModel = new MainWindowModel();
MainPage main = new MainPage();
main.DataContext = viewModel;
// TODO: change this value to a cache size that is appropriate for your application
rootFrame.CacheSize = 1;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
// TODO: Load state from previously suspended application
}
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
DataAccess.cs
{
readonly List<Menu> _menu;
public MenuRespository()
{
if(_menu==null)
{
_menu = new List<Menu>();
}
_menu.Add(Menu.CreateMenu("/Photos/Gas-50.png", "t"));
_menu.Add(Menu.CreateMenu("/Photos/Gas-50.png", "t"));
_menu.Add(Menu.CreateMenu("/Photos/Gas-50.png", "t"));
_menu.Add(Menu.CreateMenu("/Photos/Gas-50.png", "t"));
_menu.Add(Menu.CreateMenu("/Photos/Gas-50.png", "t"));
_menu.Add(Menu.CreateMenu("/Photos/Gas-50.png", "t"));
_menu.Add(Menu.CreateMenu("/Photos/Gas-50.png", "t"));
}
public List<Menu> GetMenu()
{
return new List<Menu>(_menu);
}
}
Menu.cs
public class Menu
{
public static Menu CreateMenu(string iconthumb, string text)
{
return new Menu { IconThumb = iconthumb, Text = text };
}
public string IconThumb { get; set; }
public string Text { get; set; }
}
MainWindowsModel
public class MainWindowModel :ViewModelBase
{
readonly MenuRespository _menuRepository;
ObservableCollection<ViewModelBase> _viewModels;
public MainWindowModel()
{
_menuRepository = new MenuRespository();
//create an instance of our viewmodel add it to our collection
MenuListViewModel viewModel = new MenuListViewModel(_menuRepository);
this.ViewModels.Add(viewModel);
}
public ObservableCollection<ViewModelBase> ViewModels
{
get
{
if(_viewModels==null)
{
_viewModels = new ObservableCollection<ViewModelBase>();
}
return _viewModels;
}
}
}
ViewBase
public abstract class ViewModelBase :INotifyPropertyChanged, IDisposable
{
protected ViewModelBase()
{
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler hander = this.PropertyChanged;
if(hander!=null)
{
var e = new PropertyChangedEventArgs(propertyName);
hander(this, e);
}
}
public void Dispose()
{
this.Dispose();
}
protected virtual void OnDispose()
{
}
}
class MenuListViewModel :ViewModelBase
{
readonly MenuRespository _menuRepository;
public ObservableCollection<Model.Menu> AllMenu
{
get;
private set;
}
public MenuListViewModel(MenuRespository menuRepository)
{
if(menuRepository==null)
{
throw new ArgumentException("menuRepository");
}
_menuRepository = menuRepository;
this.AllMenu = new ObservableCollection<Model.Menu>(_menuRepository.GetMenu());
}
protected override void OnDispose()
{
//base.OnDispose();
this.AllMenu.Clear();
}
}
MenuListBox.xaml into View(show off "Severity Code Description Project File Line Error CS0263 Partial declarations of 'MenuListBox' must not specify different base classes
MixNokia.Windows
"
<UserControl
x:Class="MixNokia.View.MenuListBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MixNokia.View"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel>
<ListBox ItemsSource="{Binding AllMenu}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding IconThumb}" Width="40" Height="40" VerticalAlignment="Center" HorizontalAlignment="Left"></Image>
<TextBlock Text="{Binding Text}" FontSize="15" Foreground="#CCCCCC" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</UserControl>
The final
<Page
x:Class="MixNokia.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MixNokia"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:MixNokia.ViewModel"
xmlns:v="clr-namespace:MixNokia.View"
mc:Ignorable="d">
<Page.Resources>
<DataTemplateSelector x:Key="vm:MainWindowViewModel"></DataTemplateSelector>
</Page.Resources>
<ListBox x:Name="lstMainMenu"
SelectionChanged="lstMainMenu_SelectionChanged"
Background="Transparent"
ItemsSource="{Binding ViewModel}">
I'm developing on universal.