DataGridComboBoxColumn绑定到列表<;字符串>;
本文关键字:字符串 gt 绑定 lt 列表 DataGridComboBoxColumn | 更新日期: 2023-09-27 18:30:06
我有一个包含数据网格的WPF应用程序。数据网格绑定到我的对象OrderBlock,该对象包含Orders类型的List。
<DataGrid DataContext="{Binding OrderBlock}"
Name="dataGridOrdersGood"
ItemsSource="{Binding Orders}"
这工作得很好,在我的数据网格中显示得很好。不过,在我的列表中有一个属性(StatusGood),我想显示为一个组合框,其中只能有两个值,"发送"或"保持"。
因此,我试图将组合框值绑定到ListStatusList,如下所示。然后尝试将实际值绑定到我的对象。
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
任何帮助都会很棒!谢谢M
我有一个解决方案,其中您的列表是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#类
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;
我希望这能帮助你。。。
看起来DataGridComboBoxColumn->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}}" >