1

それぞれ 2 列のアイテム、購入率を持つ Datagrid があります。アイテム列は DatagridCombobox 列です。今、アイテム データベース テーブルからそのコンボボックスにすべてのアイテムを追加したいと思います。それをバインドするにはどうすればよいですか、また、アイテムをどのように表すのですかオブジェクトのコレクション?

私のXamlは:

 <my:DataGrid Name="dgReceiveInventory" ItemsSource="{Binding}"   SelectionUnit="Cell"   AutoGenerateColumns="False"  >
      <my:DataGrid.Columns>
        <!--3-Product Column-->
                    <my:DataGridComboBoxColumn  Header="Product Name" Width="200" Binding="{Binding ProductName}" IsReadOnly="True"> <my:DataGridComboBoxColumn
       <!--7-Purchase Rate Column-->
                    <my:DataGridTextColumn Header="Purchase Rate" ElementStyle="{StaticResource TextBlockContentRightAlign}" Width="100" Binding="{Binding PurchaseRate}" IsReadOnly="True"></my:DataGridTextColumn>
      </my:DataGrid.Columns>
 </my:DataGrid>

私のクラスは:

 class clsItems : INotifyPropertyChanged, IDataErrorInfo
{
     private string _ProductName;
     private decimal _PurchaseRate;

    public string ProductName
    {
        get { return _ProductName; }
        set
        {
            _ProductName = value;
            OnPropertyChanged("ProductName");
        }
    }

    public decimal PurchaseRate 
    {
        get { return _PurchaseRate; }
        set
        {
            _PurchaseRate = value;
            OnPropertyChanged("PurchaseRate");
        }
    }
}
4

1 に答える 1

0

にバインドする必要がありObservableCollection<T>ます。

最初に、データベースのすべての項目をObservableCollection<clsItem>ViewModel のプロパティまたはコード ビハインドに追加します (MVVM を使用しているかどうかはわかりませんが、強くお勧めします)。次に、ViewModel またはコード ビハインドに DataBind します。その後、ItemsSourceプロパティを に設定しますObservableCollection

これは非常に単純なコード例です (MVVM にはありません)。

コードビハインド:

public partial class MainWindow : Window
{
    //This is the Collection you will DataBind your ComboBox to
    public ObservableCollection<clsItems> ItemsCollection { get; set; }

    public MainWindow()
    {
        this.ItemsCollection = new ObservableCollection<clsItems>
        {
            new clsItems()
            {
                ProductName = "Product 1",
                PurchaseRate = 10
            },
            new clsItems()
            {
                ProductName = "Product 2",
                PurchaseRate = 20
            }
        };

        InitializeComponent();
    }
}

XAML ファイル:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="350"
        Width="525"
        DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <StackPanel>
        <DataGrid
                  ItemsSource="{Binding Path=ItemsCollection}"
                  SelectionUnit="Cell"
                  AutoGenerateColumns="False">
            <DataGrid.Columns>
                <!--3-Product Column-->
                <DataGridTextColumn  Header="Product Name"
                                         Width="200"
                                         IsReadOnly="True"
                                         Binding="{Binding ProductName}">
                    <!--7-Purchase Rate Column-->
                </DataGridTextColumn>
                <DataGridTextColumn Header="Purchase Rate"
                                    Width="100"
                                    Binding="{Binding PurchaseRate}"
                                    IsReadOnly="True">
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>
</Window>

ここで何をしますか?まずDataContext、Window の をそれ自体に設定します (MVVM では代わりに ViewModel にバインドします)。これで、ウィンドウのパブリック プロパティにアクセスできます。次にItemsSource、ComboBox の Property を、CodeBehind ファイルで定義した ObservableCollection プロパティに設定します。3 番目に、DisplayMember パスをProductNameプロパティに設定します。そうしないと、ComboboBox は、コレクション内のアイテムの名前ではなく、WPFApplication1.clsItems を表示するだけになります。最後にSelectedIndex、ComboBox が項目を表示するように を 0 に設定します。もちろん、SeletedIndex (またはより適切な SelectedItem) をコード ビハインド ファイルのプロパティにデータバインドし、ユーザーが選択したデータをさらに処理することもできます。

これにより、基になるコレクションを変更するだけで、ビューの ComboBox に自動的に反映されます。

これが役立つことを願っています。データバインディングの詳細については、こちらをご覧ください

PS clsItems の名前を Items に変更します。Items がクラスであることは明らかです。

于 2013-10-26T12:50:52.313 に答える