0

我有一个关于数据绑定的问题,我真的很难理解。我的扩展初始屏幕上有两个 ComboBox。我想要实现的是当你从第一个 ComboBox 中选择一个项目时,第二个 ComboBox 中的项目应该改变。请看下面的代码。

首先让我尝试解释一下我的数据是什么样的以及我面临的问题。

  • 收藏
    • 一个
      • AA
      • AB
      • 交流电
      • 文学学士
      • BB
    • C
      • 加州

第一个 ComboBox 应将 A、B 和 C 显示为项目。现在假设您选择了 A,ComboBox 2 应该将 AA、AB 和 AC 显示为项目。我遇到的问题是 ComboBox 2 仅显示 AA,而不是所有 3 个项目。

我的 ViewModel 称为 MainViewModel 如下所示:-

    public class ItemViewModel : INotifyPropertyChanged
{

    private string _befattning;
    public string Befattning
    {
        get
        {
            return _befattning;
        }
        set
        {
            if (value != _befattning)
            {
                _befattning = value;
                NotifyPropertyChanged("Befattning");
            }
        }
    }

    private string _befattning2;
    public string Befattning2
    {
        get
        {
            return _befattning2;
        }
        set
        {
            if (value != _befattning2)
            {
                _befattning2 = value;
                NotifyPropertyChanged("Befattning2");
            }
        }
    }

    private string _befattning3;
    public string Befattning3
    {
        get
        {
            return _befattning3;
        }
        set
        {
            if (value != _befattning3)
            {
                _befattning3 = value;
                NotifyPropertyChanged("Befattning3");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        //NotifyPropertyChanged Code
    }
}



public class MainViewModelGroups : INotifyPropertyChanged
{
    public MainViewModelGroups(String enhet)
    {
        this._enhetsNamn = enhet;
    }

    private string _enhetsNamn;
    public string EnhetsNamn
    {
        get { return _enhetsNamn; }
    }

    private string _selectedItem;
    public string SelectedItem
    {
        get { return _selectedItem; }
        set
        {
            if (value != _selectedItem)
            {
                _selectedItem = value;
                NotifyPropertyChanged("SelectedItem");
            }
        }
    }

    private ObservableCollection<ItemViewModel> _items = new ObservableCollection<ItemViewModel>();
    public ObservableCollection<ItemViewModel> Items
    {
        get
        {
            return this._items;
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        //NotifyPropertyChangedCode
    }
}

public sealed class MainViewModel
{
    private static MainViewModel _mainViewModel = new MainViewModel();

    private ObservableCollection<MainViewModelGroups> _collection = new ObservableCollection<MainViewModelGroups>();
    public ObservableCollection<MainViewModelGroups> Collection
    {
        get { return this._collection; }
    }

    public MainViewModel()
    {
        var enhet1 = new MainViewModelGroups("Akutmottagning");
        enhet1.Items.Add(new ItemViewModel() { Befattning = "Ledningsansvarig sjuksköterska" });
        Collection.Add(enhet1);
    }

我的 XAML 代码看起来像这样

<ComboBox x:Name="EnhetLista" 
              ItemsSource="{Binding Collection}"
              SelectedItem="{Binding SelectedItem, Mode=OneWay}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding EnhetsNamn}"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
    <ComboBox x:Name="BefattningsLista"
              DataContext="{Binding ElementName=EnhetLista, Path=SelectedItem, Mode=OneWay}"
              ItemsSource="{Binding Path=Items, Mode=OneWay}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}" />
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

有人可以帮助解释我的代码有什么问题以及如何实现我的目标吗?

4

1 回答 1

1

将第二个 ObservableCollection 添加到您的视图模型,然后根据所选项目进行更改。

public sealed class MainViewModel
{
    private static MainViewModel _mainViewModel = new MainViewModel();

    private ObservableCollection<MainViewModelGroups> _collection = new ObservableCollection<MainViewModelGroups>();
    public ObservableCollection<MainViewModelGroups> Collection
    {
        get { return this._collection; }
    }

    public ObservableCollection<ItemViewModel> Items
    {
        get { return this._items; }
        set { this._items = value; OnPropertyChanged("Items"); }
    }

    public MainViewModelGroups SelectedGroup
    {
        get { return this._selectedGroup; }
        set { this._selectedGroup = value; Items = value.Items; }
    }

    public MainViewModel()
    {
        var enhet1 = new MainViewModelGroups("Akutmottagning");
        enhet1.Items.Add(new ItemViewModel() { Befattning = "Ledningsansvarig sjuksköterska" });
        Collection.Add(enhet1);
    }
}

您的 Xaml 将更改为:

<ComboBox x:Name="EnhetLista" 
          ItemsSource="{Binding Collection}"
          SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding EnhetsNamn}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
<ComboBox x:Name="BefattningsLista"
          ItemsSource="{Binding Path=Items}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

您的视图模型可能需要实现 INotifyPropertyChanged。但它可能不会,因为 ObservableCollection 可能会为您解决这个问题。

于 2013-05-08T23:04:17.117 回答