我有一个包含数据网格的WPF应用程序。 datagrid绑定到我的对象OrderBlock,它包含一个Orders类型的List。
<DataGrid DataContext="{Binding OrderBlock}"
Name="dataGridOrdersGood"
ItemsSource="{Binding Orders}"
这很好用,在我的数据网格中很好地显示。我的列表中有一个属性(StatusGood)虽然我想显示为一个组合框,其中只有两个值,“发送”或“保持”。
所以我试图将组合框值绑定到List StatusList,如下所示。然后尝试将实际值绑定到我的对象。
public class ViewModel : INotifyPropertyChanged
{
public List<string> StatusList;
// constructor
public ViewModel()
{
StatusList = new List<string>();
StatusList.Add("Hold");
StatusList.Add("Send");
}
}
<DataGridComboBoxColumn Header="Status Good" SelectedItemBinding="{Binding StatusList}" SelectedValuePath="{Binding StatusGood}"/>
然而,除了空的组合框外,没有显示任何内容。我不明白为什么我的组合框至少没有显示我的对象的价值?我提供了一个列表,所以我不明白为什么它没有显示任何内容。
我是WPF的新手,必须努力去理解它。我已经引用但显然没有完全理解它。 http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcomboboxcolumn.aspx
任何帮助都会很棒! 谢谢, 中号
答案 0 :(得分:2)
看起来像DataGridComboBoxColumn-&gt; SelectedItemBinding必须在你的情况下:
SelectedItemBinding="{Binding StatusGood}"
并且您还必须设置DataGridComboBoxColumn的ItemsSource属性并修改ViewModel以提供组合值以使用属性(StatusList)而不是字段。
VM:
public class ViewModel
{
public List<string> StatusList { get; set; }
// constructor
public ViewModel()
{
StatusList = new List<string>();
StatusList.Add("Hold");
StatusList.Add("Send");
}
}
XAML:
<DataGrid.Resources>
<local:ViewModel x:Key="ComboItems" />
</DataGrid.Resources>
<DataGridComboBoxColumn SelectedItemBinding="{Binding StatusGood}" ItemsSource="{Binding Path=StatusList, Source={StaticResource ComboItems}}" >
答案 1 :(得分:0)
我有一个解决方案,你的List是ComboBoxItem,这可能吗?
以下是我的示例XAML:
<DataGrid AutoGenerateColumns="False" Name="myGridTest">
<DataGrid.Columns>
<DataGridTextColumn Header="Text" Binding="{Binding MyText}" />
<DataGridTemplateColumn Header="Combobox">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedIndex="0" ItemsSource="{Binding ComboList}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我的C#-Class
public class Test
{
private string _MyText;
private IList<ComboBoxItem> _ComboList;
public Test()
{
_MyText = "Test 123";
_ComboList = new List<ComboBoxItem>();
_ComboList.Add(new ComboBoxItem() { Content = "Next", IsSelected = true });
_ComboList.Add(new ComboBoxItem() { Content = "Prev." });
}
public IList<ComboBoxItem> ComboList
{
get { return _ComboList; }
set { _ComboList = value; }
}
public string MyText
{
get { return _MyText; }
set { _MyText = value; }
}
}
对于测试:
List<Test> cList = new List<Test>();
cList.Add(new Test());
cList.Add(new Test());
cList.Add(new Test());
cList.Add(new Test());
cList.Add(new Test());
myGridTest.ItemsSource = cList;
我希望这可以帮助你...