DataGridComboBoxColumn绑定到List <string> </string>

时间:2013-09-02 20:03:03

标签: c# wpf xaml datagrid combobox

我有一个包含数据网格的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

任何帮助都会很棒! 谢谢, 中号

2 个答案:

答案 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;

我希望这可以帮助你...