1

我是 windows phone 编程的新手,在创建主菜单时我被卡住了。所以,基本是我想使用列表框显示 5 个类别。类别是静态的。那么我这样做对吗?我可以制作比这更简单的代码吗?这是我现在的代码,使用 VS2012 中的 WP 模板。

如果有人能帮助我理解 MVVM 模式,我真的很感激,

/Views/MainPage.xaml:

<ListBox Grid.Column="1" Margin="-48,0,0,0" ItemsSource="{Binding Categories}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <TextBlock Text="{Binding Category}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

/ViewModels/MainViewModel.cs

public class MainViewModel : ViewModelBase
{
    public MainViewModel()
    {
        this.Categories = new ObservableCollection<ItemViewModel>();
    }

    public ObservableCollection<ItemViewModel> Categories { get; private set; }

    public bool IsDataLoaded
    {
        get;
        private set;
    }

    public void LoadData()
    {
        // Sample data; replace with real data
        this.Categories.Add(new ItemViewModel() { Category = "tourist attraction" });
        this.Categories.Add(new ItemViewModel() { Category = "hotel" });
        this.Categories.Add(new ItemViewModel() { Category = "restaurant" });
        this.Categories.Add(new ItemViewModel() { Category = "bars & nightlife" });
        this.Categories.Add(new ItemViewModel() { Category = "shopping centre" });

        this.IsDataLoaded = true;
    }
}

/Views/ItemViewModel.cs

public class ItemViewModel : ViewModelBase
{
    private string _category;
    public string Category
    {
        get
        {
            return _category;
        }
        set
        {
            if (value != _category)
            {
                _category = value;
                NotifyPropertyChanged("Category");
            }
        }
    }
}
4

1 回答 1

1

如果菜单是静态的,我建议使用您显示的视图模型自定义用户控件。

我不同意 ItemViewModel,因为它不接缝视图模型,它接缝模型它应该只是一个 INotifyPropertyChanged 实现(或您拥有的任何其他基本模型类)。请记住,视图模型应该作为数据和相关数据操作的容器,而不是数据本身。

就像 Daniel 说的那样,您的代码没有任何问题,这个解决方案和其他解决方案一样好,MVVM 是一种架构模式,有时拥有您可以阅读和理解的代码比您无法理解的严格 MVVM 代码更好

于 2013-01-22T13:10:33.903 回答