【问题标题】:Combo not updating using MVVM and XAML组合不使用 MVVM 和 XAML 更新
【发布时间】:2013-02-27 21:42:37
【问题描述】:

我在使用 MVVM 方法在 XAML 中对组合进行数据绑定时遇到问题。

我在后面的代码中设置了组合的源代码,如下所示:

AgesViewModel agesViewModel = new AgesViewModel();
comboAge.SelectedValuePath = "AgeID";
comboAge.DisplayMemberPath = "Age";
comboAge.ItemsSource = agesViewModel.GetAges(); 

组合的 XAML 是:

<ComboBox x:Name="comboAge"
          SelectedValue="{Binding AgeID}" />

组合是带有文本控件的页面的一部分,它们都可以很好地绑定数据。页面 DataContext 设置为一个 ViewModel (carViewModel),它有一个名为 AgeID 的属性。

所以当组合项目发生变化时,我希望 carViewModel.AgeID 使用所选值进行更新。

每当我从组合中选择一个项目时,都不会更新任何内容。我做错了什么??

提前致谢

我正在使用 XAML、C#4.5 并在 Visual Studio 2012 中编写一个 Windows 商店应用程序。

【问题讨论】:

    标签: c# xaml mvvm


    【解决方案1】:

    如果您想遵循 MVVM 模式,请在您的 carViewModel 中也提供 ComboBox 的数据并绑定到它。

    换句话说:

    <ComboBox x:Name="comboAge" ItemsSource="{Binding MyAgeList}" SelectedValue="{Binding AgeID}" />
    

    更改 ComboBox 中的值时,这也会更新 AgeID 属性。

    假设 AgeID 是 int(当然,它可以是任何你想要的),那么 MyAgeList 应该在 carViewModel 中这样定义:

    public List<int> MyAgeList {get; set;}
    
    // Constructor
    public CarViewModel()
    {
        MyAgeList = new AgesViewModel().GetAges();
    }
    

    【讨论】:

    • 好的,我已经这样做了,但我得到了相同的结果。我来的 XAML 现在是这样的:
    • 我的 CarViewModel 现在是这样的: public CarViewModel() { AgeList = new AgesViewModel().GetAges(); } 公共 ObservableCollection AgeList { 获取;放; }
    • 为什么 AgeList 是 ViewModel 的集合??
    • 我正在尝试为我的组合返回行列表。每行包含 AgeID 和一个描述(这是我的年龄值(1-3、4-6 等)。我肯定需要返回这个吗?
    • 然后创建一个名为 AgeClass 的新类,它具有这两个属性。这是您的 model (例如您的 data )。在这种情况下,您不应创建 ViewModels 数组。 GetAges() 返回什么?它应该返回这个 AgeClass 的列表...
    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 2015-09-12
    • 2017-07-30
    • 2014-11-23
    • 2017-05-04
    • 2015-12-17
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多