3

我有一个包含数据网格的 WPF 应用程序。数据网格绑定到我的对象 OrderBlock,该对象包含 Orders 类型的列表。

<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

任何帮助都会很棒!谢谢,米

4

2 回答 2

2

我有一个解决方案,您的 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# 类

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;

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

于 2013-09-02T20:38:00.387 回答
2

看起来 DataGridComboBoxColumn->SelectedItemBinding 必须在您的情况下:

 SelectedItemBinding="{Binding StatusGood}"

并且您还必须设置 DataGridComboBoxColumn 的 ItemsSource 属性并修改您的 ViewModel 以提供组合值以使用属性(StatusList)而不是字段。

虚拟机:

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}}" >
于 2013-09-02T20:39:13.867 回答