这个问题在这里已有答案:
我是WPF和MVVM的新手,所以我可能会缺少一些基本的理解 .
我正在尝试 Build 一个可以订购的Feed列表 . 每个订单都需要名称,金额和单位 .
单位应该放在一个组合框中,这就是问题所在 . 根据方法的不同,组合框不会出现,或者只是空白 .
以下是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>
这是viewmodel:
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中使用组合框构建堆栈面板是唯一能够出现组合框的解决方案,但绑定在这里没有任何意义 .
2 回答
XAML 为您的DataGrid组合框列
SelectedValueBinding="{Binding UnitId, UpdateSourceTrigger=PropertyChanged}"
其中UnitId
是DataGrid ItemsSource的一个元素,这是您选择存储在数据库中的值(或从中读取)DisplayMemberPath="Name"
SelectedValuePath="Id"
其中Id
和Name
是Unit
类的属性DummyUnitList 应为
ObservableCollection<>
而不是List<>
缺少ComboBox的ItemsSource,请使用ObservableCollection而不是List . 那应该有用;