【问题标题】:MVVM Prism 5 WPF and combo boxesMVVM Prism 5 WPF 和组合框
【发布时间】:2015-11-09 18:16:45
【问题描述】:

我不明白为什么当我在另一个组合框中进行选择时我的组合框没有更新。我对 MVVM 仍然很陌生,但理论上我的代码应该可以工作。我可以在表单加载时填充组合,但我需要用新值刷新组合,这不起作用。我可以看到它检索新值,但它从未在表单上显示它们。

我的 XAML 如下所示:

<ComboBox Grid.Column="1" ItemsSource="{Binding Path=Vendors}" SelectedItem="{Binding SelectedVendor, Mode=TwoWay}"   HorizontalAlignment="Left" Margin="24,12,0,11" Grid.Row="3" VerticalAlignment="Center" Width="293" />
<ComboBox x:Name="VendorProductServiceCB" HorizontalAlignment="Left" Margin="20.6,16.2,0,55.4" VerticalAlignment="Center" Width="293" Grid.Row="7" Grid.Column="1" ItemsSource="{Binding Path=VendorProductServices, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Name" SelectedItem="{Binding Path=SelectedVendorProductService, Mode=TwoWay}" Height="22"/>

我的 ViewModel 代码是这样的:

public ObservableCollection<string> Vendors { get; set; } 
public ObservableCollection<VendorProductService> VendorProductServices { get; private set; }

public VendorProductService SelectedVendorProductService
    {
        get { return _selectedVendorProductService; }
        set { SetProperty(ref _selectedVendorProductService, value); }
    }

public string SelectedVendor
    {
        get { return _selectedVendor; }
        set
        {
            SetProperty(ref _selectedVendor, value);            
            SelectionChangedCommand.Execute(this);

        }               
    }

public FormSelectionViewModel()
    {
        Vendors = new ObservableCollection<string>(FetchVendors());

        VendorProductServices = new ObservableCollection<VendorProductService>(FetchVendorProductServices(_selectedVendor));  

        SelectionChangedCommand = new DelegateCommand(SelectionChanged);
    }
public  void SelectionChanged()
    {

        VendorProductServices = new ObservableCollection<VendorProductService>(FetchVendorProductServices(_selectedVendor)); 

    }

【问题讨论】:

    标签: c# wpf mvvm prism


    【解决方案1】:

    您没有为VendorProductServices 引发PropertyChanged 事件,因为它是一个自动属性。

    要么改成:

    private ObservableCollection<VendorProductService> _vendorProductServices;
    public ObservableCollection<VendorProductService> VendorProductServices 
    { 
        get { return _vendorProductServices; }
        private set { SetProperty(ref _vendorProductServices, value); }
    }        
    

    或者将您的集合属性更改为只读并使用 .Clear() 和 .Add() 而不是创建新集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 2014-03-30
      • 2011-04-16
      • 2012-02-29
      • 2018-05-03
      • 2017-02-02
      • 2015-09-15
      相关资源
      最近更新 更多