【发布时间】:2018-05-21 09:32:08
【问题描述】:
我对 WPF 和 MVVM 还很陌生,所以我可能缺少一些基本的了解。
我正在尝试构建一个可以订购的提要列表。每个订单都需要名称、数量和单位。
这些单位应该放在一个组合框中,这就是问题所在。根据方法的不同,组合框不会出现,或者只是空的。
以下是 XAML。
<UserControl x:Class="TestProject.View.FruitFoodList"
DataContext="{Binding Test, Source={StaticResource Locator}}">
<Grid>
<DataGrid ItemsSource="{Binding DummyFruitList}" IsReadOnly="True" Name="dgFeedList" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Feed" Binding="{Binding Name}" Width="*"/>
<DataGridTemplateColumn Header="Amount">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!-- Code for amount here -->
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridComboBoxColumn Header="Unit">
<!--Combobox for units here-->
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
这是视图模型:
public class DummyViewModel : ViewModelBase
{
private List<DummyProduct> _dummyFruit = new List<DummyProduct>();
public List<DummyProduct> DummyFruitList
{
get { return _dummyFruit; }
set { _dummyFruit = value; }
}
public List<Unit> DummyUnitList = new List<Unit> {
new Unit { Name = "kg"},
new Unit { Name = "piece(s)" },
new Unit { Name = "box(es)" }
};
public DummyViewModel()
{
string[] lines = File.ReadAllLines("../../DummyFruit.txt", Encoding.UTF7);
foreach (string product in lines)
{
DummyProduct dummyProduct = new DummyProduct(product);
dummyProduct.Units = DummyUnitList;
DummyFruitList.Add(dummyProduct);
}
}
}
还有 DummyProduct:
public class DummyProduct
{
public DummyProduct(string product)
{
Name = product;
}
public string Name { get; set; }
public List<Unit> Units;
}
每个产品的单位可能不同。 我没有运气,尝试了以下解决方案: Binding WPF ComboBox to a Custom List Binding ItemsSource of a ComboBoxColumn in WPF DataGrid
上述解决方案对我来说根本没有显示组合框。 但同样,我可能做错了。
迄今为止,在 datagridtemplate 中制作带有组合框的堆栈面板是唯一可以显示组合框的解决方案,但绑定在这里毫无意义。
【问题讨论】:
-
你忘记了你的物品来源作为绑定
-
在 DataGridComboBoxColoumn 中?添加绑定(我想是到 DummyFruitList)什么都不做。
-
我发布了答案。你可以看看。并使用 ObservableCollection 而不是列表。
-
是的,使用 OC 并始终将您的收藏属性设为只读。
-
我实际上最终使用了这个答案中提出的 DataGridTemplateColumn:stackoverflow.com/questions/7088284/…,因为所提供的解决方案都没有让我看到任何组合框,所以我没有任何机会正确测试答案。对这个答案的正确回应是什么?