【问题标题】:WPF Combobox isn't visible in View while using MVVM pattern [duplicate]使用 MVVM 模式时,WPF 组合框在视图中不可见 [重复]
【发布时间】:2019-04-12 13:07:53
【问题描述】:

我使用 MVVM 模式创建了一个 wpf 项目。在 View 中,当我启动一个项目时,我在 ComboBoxes 和 Labels 中没有看到任何项目,尽管在调试时我在 ObservableCollection 中看到了 DataContext 中的项目。 我的代码中的 Binding 可能有什么问题?

我的 XAML 代码:

<ItemsControl ItemsSource="{Binding Items}" >
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"  />
                        <ColumnDefinition Width="*"  />
                    </Grid.ColumnDefinitions>
                    <Label  Content="{Binding Name}" Grid.Column="0" Height="26" Width="105" Margin="5,5,0.2,0"/>
                    <ComboBox  ItemsSource="{Binding ComboBoxItems}" Grid.Column="1" />
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

XAML.cs 代码:

this.DataContext = new ViewModel();
InitializeComponent(); 

ViewModel.cs 代码:

public ObservableCollection<Model> Items;
public ViewModel()
    {
        Items = new ObservableCollection<Model>();
        Items.Add(new Model { Name = "111111" });
        Items.Add(new Model { Name = "222222" });
        Items.Add(new Model { Name = "444444" });
        Items.Add(new Model { Name = "333333" });
    }

型号代码:

    public class Model : INotifyPropertyChanged
        {
    public ObservableCollection<string> ComboBoxItems;

    public Model()
            {
                   ComboBoxItems =new ObservableCollection<string>();
                   ComboBoxItems.Add("111111");
                   ComboBoxItems.Add("222222");
                   ComboBoxItems.Add("444444");
                   ComboBoxItems.Add("333333");
            }
private string _name;
    public string Name
            {
                get { return _name; }
               set
               {
                  _name= value;
                  OnPropertyChanged("Name");
               }
            }
    public void OnPropertyChanged([CallerMemberName]string prop = "")
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(prop));
            }
  public event PropertyChangedEventHandler PropertyChanged;
       }

【问题讨论】:

  • 您的 ComboBoxItems 不是公共属性。你需要一个公共属性来绑定。

标签: wpf mvvm data-binding itemscontrol itemssource


【解决方案1】:

您需要属性才能进行绑定。

改变你的变量

 public ObservableCollection<string> ComboBoxItems;

到属性

 public ObservableCollection<string> ComboBoxItems {get;set;}

类似物品

public ObservableCollection<Model> Items;

  public ObservableCollection<Model> Items  {get;set;}

您可能希望在 setter 中更改这些 propfull 和 raise 属性。

但是属性有getter和setter。

变量不会,也不会绑定。

【讨论】:

  • 非常感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 2020-01-17
  • 2014-05-12
  • 2011-12-11
  • 2015-09-12
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多