C# 如何在C中的视图中绑定viewmodel中对象的IEnumerable列表#
如何在视图(列表框)中绑定对象的IEnumerable列表 例如,我有:C# 如何在C中的视图中绑定viewmodel中对象的IEnumerable列表#,c#,wpf,mvvm,listbox,ienumerable,C#,Wpf,Mvvm,Listbox,Ienumerable,如何在视图(列表框)中绑定对象的IEnumerable列表 例如,我有: 拥有IEnumerable功能的产品对象 处理向产品添加功能的ViewModel ProductViewModel 允许插入和删除功能的产品视图,以及与Products.features绑定的列表框 问题是每次我添加一个特性时,列表框都不会更新 模型产品 public class Product : ObservableObject { #region Fields string code, n
- 拥有IEnumerable功能的产品对象
- 处理向产品添加功能的ViewModel ProductViewModel
- 允许插入和删除功能的产品视图,以及与Products.features绑定的列表框
public class Product : ObservableObject
{
#region Fields
string code, name;
Category category;
ObservableCollection<Feature> features;
#endregion
#region Properties
public string Code
{
get => code;
set
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentNullException(value, "Il codice del prodotto non può essere nullo.");
if (value.Length > 10)
throw new ArgumentOutOfRangeException(value, "Il codice del prodotto non può essere lungo più di 10 caratteri.");
code = value;
RaisePropertyChangedEvent("Code");
}
}
public string Name
{
get => name;
set
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentNullException(value, "Il nome del prodotto non può essere nullo.");
if (value.Length > 20)
throw new ArgumentOutOfRangeException(value, "Il nome del prodotto non può essere lungo più di 20 caratteri.");
name = value;
RaisePropertyChangedEvent("Name");
}
}
public Category Category
{
get => category;
set
{
category = value;
RaisePropertyChangedEvent("Category");
}
}
public ObservableCollection<Feature> Features
{
get => features;
set
{
features = value;
RaisePropertyChangedEvent("Features");
RaisePropertyChangedEvent("PrintFeatures");
}
}
public string PrintFeatures
{
get
{
string line = "";
foreach(var feature in features)
{
line += $"{feature.Description}{Environment.NewLine}";
}
return line;
}
}
public int HashCode => Code.GetHashCode();
#endregion
}
公共类产品:ObservieObject
{
#区域字段
字符串代码、名称;
类别;
可观测的采集特征;
#端区
#区域属性
公共字符串代码
{
get=>代码;
设置
{
if(string.IsNullOrWhiteSpace(value))
抛出新的ArgumentNullException(值,“Il codice del prodotto non puòessere nullo.”);
如果(value.Length>10)
抛出新的ArgumentOutOfRangeException(值“Il codice del prodotto non puòessere lungo piùdi 10 caratteri.”);
代码=值;
RaisePropertyChangedEvent(“代码”);
}
}
公共字符串名
{
get=>name;
设置
{
if(string.IsNullOrWhiteSpace(value))
抛出新的ArgumentNullException(值,“Il nome del prodotto non puòessere nullo.”);
如果(value.Length>20)
抛出新的ArgumentOutOfRangeException(值“Il nome del prodotto non puòessere lungo piùdi 20克拉”);
名称=值;
RaisePropertyChangedEvent(“名称”);
}
}
公共类别
{
get=>category;
设置
{
类别=价值;
提高产权变更(“类别”);
}
}
公共可观测集合特征
{
获取=>功能;
设置
{
特征=价值;
提出财产变更(“特征”);
提高属性更改(“打印特征”);
}
}
公共字符串打印特性
{
得到
{
字符串行=”;
foreach(特征中的var特征)
{
line+=$“{feature.Description}{Environment.NewLine}”;
}
回流线;
}
}
public int HashCode=>Code.GetHashCode();
#端区
}
视图模型
public class ProductViewModel : BaseViewModel
{
#region Fields
ObservableCollection<Category> categories;
ObservableCollection<FeatureType> featureTypes;
#endregion
#region Data Properties
public ObservableCollection<Category> Categories
{
get => categories;
set
{
categories = value;
RaisePropertyChangedEvent("Categories");
}
}
public ObservableCollection<FeatureType> FeatureTypes
{
get => featureTypes;
set
{
featureTypes = value;
RaisePropertyChangedEvent("FeatureTypes");
}
}
public Product NewProduct { get; set; }
public Feature NewFeature { get; set; }
public Feature SelectedFeature { get; set; }
#endregion
#region Commands
public ICommand AddItem { get; set; }
public ICommand AddFeature { get; set; }
#endregion
#region Constructor
public ProductViewModel(WarehouseViewModel warehouseViewModel)
{
NewFeature = new Feature();
NewProduct = new Product();
AddFeature = new AddFeatureCommand(NewProduct.Features, NewFeature);
AddItem = new AddItemCommand(warehouseViewModel.Products, NewProduct);
Categories = new ObservableCollection<Category>();
Categories.Add(new Category { Name = "Infiorescenze" });
Categories.Add(new Category { Name = "Oli" });
FeatureTypes = new ObservableCollection<FeatureType>();
FeatureTypes.Add(new FeatureType
{
Name = "Peso",
UnitMeasure = "grammi",
});
FeatureTypes.Add(new FeatureType
{
Name = "Pezzi",
UnitMeasure = "semi",
});
}
#endregion
}
公共类ProductViewModel:BaseViewModel
{
#区域字段
可观察收集类别;
可观测采集特征类型;
#端区
#区域数据属性
公共可观测集合类别
{
get=>类别;
设置
{
类别=价值;
提高产权变更(“类别”);
}
}
公共可观测集合功能类型
{
get=>featureTypes;
设置
{
特征类型=值;
RaisePropertyChangedEvent(“功能类型”);
}
}
公共产品新产品{get;set;}
公共特征NewFeature{get;set;}
公共功能已选择功能{get;set;}
#端区
#区域命令
公共ICommand附加项{get;set;}
公共ICommand AddFeature{get;set;}
#端区
#区域构造函数
公共产品视图模型(仓库视图模型仓库视图模型)
{
NewFeature=NewFeature();
新产品=新产品();
AddFeature=新的AddFeatureCommand(NewProduct.Features,NewFeature);
AddItem=新的AddItemCommand(warehouseViewModel.Products,NewProduct);
类别=新的ObservableCollection();
添加(新类别{Name=“InforeSceneze”});
添加(新类别{Name=“Oli”});
FeatureTypes=新的ObservableCollection();
FeatureType.添加(新FeatureType
{
Name=“比索”,
UnitMeasure=“grammi”,
});
FeatureType.添加(新FeatureType
{
Name=“Pezzi”,
UnitMeasure=“semi”,
});
}
#端区
}
添加要素命令
class AddFeatureCommand : ICommand
{
#region Fields
ObservableCollection<Feature> features;
Feature feature;
#endregion
#region Constructor
public AddFeatureCommand(ObservableCollection<Feature> features, Feature feature)
{
this.features = features;
this.feature = feature;
}
#endregion
#region ICommand Members
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
if (features == null)
features = new ObservableCollection<Feature>();
var newFeature = new Feature
{
Type = new FeatureType
{
Name = feature.Type.Name,
UnitMeasure = feature.Type.UnitMeasure,
},
Value = feature.Value,
};
features.Add(newFeature);
}
#endregion
}
class AddFeatureCommand:ICommand
{
#区域字段
可观测的采集特征;
特征;
#端区
#区域构造函数
public addfeature命令(可观察的采集要素、要素要素)
{
这个。特征=特征;
这个特征=特征;
}
#端区
#区域ICommand成员
公共布尔CanExecute(对象参数)
{
返回true;
}
公共事件事件处理程序CanExecuteChanged
{
添加{CommandManager.RequerySuggested+=value;}
删除{CommandManager.RequerySuggested-=value;}
}
public void Execute(对象参数)
{
如果(功能==null)
features=新的ObservableCollection();
var newFeature=新特性
{
类型=新功能类型
{
Name=feature.Type.Name,
UnitMeasure=feature.Type.UnitMeasure,
},
值=特征。值,
};
添加(newFeature);
}
#端区
}
将您的IEnumerable
替换为observedcollection
每当从集合中添加或删除项时,这将通知任何绑定控件。去看看可观察的集合您的命令代码在哪里?您使用的是同一个VM实例吗?我已插入命令“AddFeature”代码。请添加您的视图代码。如果你忽略它,我们就看不到你绑定了什么。好的,修复了!通过observablecollection,它可以工作。我忘了删除一个不存在的要素类的实例化,该实例化“重写”了我必须在列表中管理的内容。谢谢它不会更新。。。现在在模型“产品”中,我有了道具