使用 MVVM 模式时,WPF 组合框在视图中不可见
WPF Combobox isn't visible in View while using MVVM pattern
我使用 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;
}
您需要属性才能进行绑定。
更改您的变量
public ObservableCollection<string> ComboBoxItems;
给一个属性
public ObservableCollection<string> ComboBoxItems {get;set;}
相似项目
public ObservableCollection<Model> Items;
到
public ObservableCollection<Model> Items {get;set;}
您可能希望在 setter.
中更改这些内容并提高 属性
但是属性有 getter 和 setter。
变量不会也不会绑定。
我使用 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;
}
您需要属性才能进行绑定。
更改您的变量
public ObservableCollection<string> ComboBoxItems;
给一个属性
public ObservableCollection<string> ComboBoxItems {get;set;}
相似项目
public ObservableCollection<Model> Items;
到
public ObservableCollection<Model> Items {get;set;}
您可能希望在 setter.
中更改这些内容并提高 属性但是属性有 getter 和 setter。
变量不会也不会绑定。