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

DataGridComboBoxColumn绑定到列表<;字符串>;

我有一个解决方案,其中您的列表是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}}" >