3

データグリッドを含む WPF アプリケーションがあります。データグリッドは、Orders 型の List を含むオブジェクト OrderBlock にバインドされています。

<DataGrid DataContext="{Binding OrderBlock}"
                  Name="dataGridOrdersGood" 
                  ItemsSource="{Binding Orders}"

これは正常に機能し、データグリッドにうまく表示されます。リストには 1 つのプロパティ (StatusGood) がありますが、「Send」または「Hold」の 2 つの値しかないコンボボックスとして表示したいと考えています。

そのため、以下に示すように、コンボボックスの値を 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

どんな助けでも素晴らしいでしょう!ありがとう、M

4

2 に答える 2

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 に答える
2

あなたのリストが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 に答える