我有这个微不足道的问题,但没有什么对我有用:/ 我试图从viewmodel设置默认选定的组合框值。这是代码:
#menu li ul{
display: none;
}
#menu li:hover>ul{
display: block;
position: absolute;
width: 100%;
}
在ViewModel中:
public class ItemFilter
{
public int Id { get; set; }
public string Name { get; set; }
}
在视图中:
public MainViewModel()
{
SelectedItemFilter = ItemFilters[0];
}
public IList<ItemFilter> ItemFilters
{
get
{
IList<ItemFilter> itemFilter = new List<ItemFilter>();
itemFilter.Add(new ItemFilter() { Id = 0, Name = "All" });
itemFilter.Add(new ItemFilter() { Id = 1, Name = "One" });
itemFilter.Add(new ItemFilter() { Id = 2, Name = "Two" });
return itemFilter;
}
}
public ItemFilter SelectedItemFilter
{
get { return _selectedItemFilter; }
set { SetProperty(ref _selectedItemFilter, value); }
}
我缺少什么?
答案 0 :(得分:2)
第一个明显的原因是每个请求都会创建ItemFilters
。因此SelectedItemFilter = ItemFilters[0];
会创建一个过滤器列表,然后将第一个过滤器分配给SelectedItemFilter
。当ComboBox请求过滤器列表时,它会获得不同的过滤器列表。因此,在SelectedItemFilter
项目列表中找不到ComboBox
。有两种解决方案:
Equals()
班级中的GetHashCode()
和ItemFilter
答案 1 :(得分:1)
正如@Zbigniew建议在财产的getter中创建一个新的List是一个坏主意。
MainViewModel
的构造函数会创建一个List<ItemFilter>
并将SelectedItemFilter
设置为此ItemFilter
个对象,然后会有另一个List<ItemFilter>
SelectedItemFilter
在解析视图中的绑定并且ComboBox
实例不在此新列表中时创建。这就是为什么你没有在public MainViewModel()
{
IList<ItemFilter> itemFilter = new List<ItemFilter>();
itemFilter.Add(new ItemFilter() { Id = 0, Name = "All" });
itemFilter.Add(new ItemFilter() { Id = 1, Name = "One" });
itemFilter.Add(new ItemFilter() { Id = 2, Name = "Two" });
ItemFilters = itemFilter;
SelectedItemFilter = itemFilter[0];
}
public IList<ItemFilter> ItemFilters { get; }
public ItemFilter SelectedItemFilter
{
get { return _selectedItemFilter; }
set { SetProperty(ref _selectedItemFilter, value); }
}
中选择任何项目。
您应该创建源集合一次:
Permit_list test_permit_list;
@Test
public void testAddPermit(){
Permit p = new Permit();
test_permit_list.add("test", p);
assertEquals(p, test_permit_list.get("test");
}