0

製品 ID に基づいて製品が動的に選択されたときに、シリアル No コンボボックスにデータを入力したい。私のXamlは次のとおりです。

 <my:DataGrid Name="dgSales" ItemsSource="{Binding}" SelectionUnit="Cell"   AutoGenerateColumns="False" >
      <my:DataGrid.Columns>
<my:DataGridTextColumn  Header="Product" Visibility="Hidden" Binding="{Binding ProductName}"></my:DataGridTextColumn>
<my:DataGridComboBoxColumn Header="Serial No" Width="135"
                                                SelectedValueBinding="{Binding SerialNo}"
                                                SelectedValuePath="SlRecord_Id"
                                                DisplayMemberPath="SlNum"

                                               >
  <my:DataGridComboBoxColumn.ElementStyle>
     <Style TargetType="{x:Type ComboBox}">
        <Setter Property="ItemsSource" Value="{Binding}" />
                            </Style>
  </my:DataGridComboBoxColumn.ElementStyle>
  <my:DataGridComboBoxColumn.EditingElementStyle>
    <Style TargetType="{x:Type ComboBox}">
        <Setter Property="ItemsSource" Value="{Binding}" />

                            </Style>
                        </my:DataGridComboBoxColumn.EditingElementStyle>
                    </my:DataGridComboBoxColumn>
  </my:DataGrid.Columns>
</my:DataGrid>

私のDataObjectは:

 class clsSalesItems : INotifyPropertyChanged, IDataErrorInfo
{
     private string _ProductName;
     private string _SerialNo;
      private ObservableCollection<ModelNos> _SerialNos;


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

    public ObservableCollection<ModelNos> SerialNos
    {
        get
        {
            return _SerialNos; 
        }
        set 
        { 
            _SerialNos = value;
            OnPropertyChanged("SerialNos");
        }
    }
}

私の SerialNo クラスは次のとおりです。

 public class ModelNos
{
    private int _SlRecord_Id;
    private string _SlNo;

    public int SlRecord_Id
    {
        get { return _SlRecord_Id; }
        set
        {
            _SlRecord_Id = value;
        }
    }
    public string SlNum
    {
        get { return _SlNo; }
        set
        {
            _SlNo = value;
        }
    }
}

今私の問題は、製品が動的に選択されたときにシリアル番号コンボボックス列を入力したいということです (シリアル番号は製品ごとに異なります)。製品が選択されたときにシリアル番号コンボボックスをバインドするにはどうすればよいですか?

4

1 に答える 1

1

DataGrid の SelectedItem プロパティを聞くか、そのプロパティを ViewModel のプロパティにバインドします。DataGrid で行を選択すると、ViewModel のプロパティのセッターが呼び出され、そこで新しい値を確認し、それに基づいて SerialNos プロパティを設定できます。SerialNos を設定すると、ComboBox の ItemsSource が更新されたことを DataGrid に通知する PropertyChanged イベントが発生します。DataGrid はさらに、ComboBoxes に新しい値を設定します。

その純粋な View-ViewModel-Model パターン。このような問題は、MVVM を使用するだけで解決され、一部のイベントをビューでキャッチしてコード ビハインドで処理する必要はありません。

于 2013-10-27T17:20:30.570 に答える