2016-08-14 4 views
0

助けてください!データグリッド上を移動するときにコンボボックスを更新する

私はインターネットで多くの研究をしましたが、私の質問には解決策が見つかりませんでした。

私には食べ物のある形があります。フォーム上にグリッドがあり、それを使って私は食べ物の上を移動することができます。画面には、カテゴリを含むコンボボックス(グリッド内ではない)があります。コンボボックスには、カテゴリテーブルのカテゴリが入力されます。データグリッド上のレコードを変更すると、コンボボックス以外のフォーム上のすべてのフィールドが更新されます。

だから私の質問は:私は、グリッド上で移動するとき保存されたカテゴリを表示するには、コンボボックスを更新するために何をすべきか? カテゴリテーブルではカテゴリに「id」フィールドがあり、フードテーブルには「カテゴリID」フィールドがあります。

私は、XAMLファイルでこれを持っている:私はあなたのコード内の小さな誤りを持って見ることができるように

<ComboBox x:Name="categoryComboBox" Grid.Row="5" Grid.Column="1" Margin="3,4,20,0" Grid.ColumnSpan="3" 
        ItemsSource="{Binding Source={StaticResource categoryViewSource}}" 
        SelectedValuePath="CategoryId" 
        DisplayMemberPath="CatName" 
        SelectedItem="{Binding CategoryId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
        Height="25" VerticalAlignment="Top"> 
      <ComboBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <VirtualizingStackPanel/> 
       </ItemsPanelTemplate> 
      </ComboBox.ItemsPanel> 
     </ComboBox> 
+0

こんにちは、新しいDataGrid行を選択するたびに、コンボボックスのSourceItemsコレクションを更新する必要があります。このコレクションは、ComboBox DataContext内のObservableCollectionにバインドする必要があります。だからあなたはそのコレクションをクリアして再充填する必要があります。 – Ilan

+0

ありがとうございます。 – Zoltan

+0

コンボアイテムソースはItemsSource = "{バインディングソース= {StaticResource categoryViewSource}}"です。アイテムは、ナビゲーション中にコンボボックスで変更(追加/削除)されません。関連する値を表示してください。たとえば、「最初のカテゴリ」、「第2のカテゴリ」の瞬間のコンボボックスアイテム。最初のレコードのカーソルがデータグリッドの場合、コンボは2番目のレコードのカーソルが「2番目のカテゴリ」と表示される場合は「最初のカテゴリ」になります。 – Zoltan

答えて

0

。私はSelectedItemの代わりにSelectedValueを使うべきです。だからそれを変更し、私はそれが適切に動作すると思います。さらに、私が以前に提案したように、スケーリングの回避策は必要ありません。ここで は一例です:

XAML

 <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" > 
     <ComboBox x:Name="categoryComboBox" ItemsSource="{Binding Source={StaticResource categoryViewSource}}" 
       SelectedValuePath="CategoryId" 
       DisplayMemberPath="CatName" 
       SelectedValue="{Binding CategoryId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
       Height="25" VerticalAlignment="Top"> 
      <ComboBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <VirtualizingStackPanel/> 
       </ItemsPanelTemplate> 
      </ComboBox.ItemsPanel> 
     </ComboBox> 
     <Button Content="Change Category" Command="{Binding SelectionChangedCommand}"></Button> 
    </StackPanel> 

のDataContext

public class MyComboDataContext:BaseObservableObject 
{ 
    private int _categoryId; 
    private ICommand _selectionChangedCommand; 

    public MyComboDataContext() 
    { 
     CategoryId = 1; 
    } 

    public int CategoryId 
    { 
     get { return _categoryId; } 
     set 
     { 
      _categoryId = value; 
      OnPropertyChanged(); 
     } 
    } 


    public ICommand SelectionChangedCommand 
    { 
     get { return _selectionChangedCommand ?? (_selectionChangedCommand = new RelayCommand(SelectionChanger)); } 
    } 

    private void SelectionChanger() 
    { 
     CategoryId += 1; 
     if (CategoryId == 4) 
      CategoryId = 1; 
    } 
} 

説明:

まず第一に、これは一例ですつまり、のシミュレーションです。コンボの更新です。ここで、コンボボックス選択値は各ボタンクリックで変更されます。あなたの例では、カテゴリの選択は、選択された値の組み合わせに影響するはずです。したがって、グリッドカテゴリの選択が行われるたびに、選択したカテゴリIDをコンボSelectedValueにバインドされたプロパティにプッシュする必要があります。あなたは次の事であなたの質問を更新してください助けるために

  1. は、出力ウィンドウ内の任意のバインディング式のエラーがありますか?
  2. コードでDataGridの選択をどのように処理しますか?
  3. データグリッドの選択がコンボボックスSelectedValueにどのように影響しますか(選択された値でなければなりません)?

さらなるヘルプが必要な場合はお知らせください。私の答えが役に立つのであれば、あなたの質問に答えとして記入してください。

+0

非常に良い助けをいただきありがとうございます。私は夕方にそれを試してみる。ちょっと混乱して、データグリッド上にカテゴリーを選択するカテゴリコンボボックスはありません。グリッドは食卓を表示し、どのカテゴリに属しているかを示します。グリッド上では、カーソルが食卓の上を移動し、カテゴリコンボボックスにカテゴリの正しい名前を表示したいだけです。写真をご覧ください。データグリッドの最初のレコードにカテゴリIDがありません(誤って)。 – Zoltan

+0

こんにちはIlan、残念ながらあなたのコードは役に立たなかった。私たちは同じボートにいません。おそらく私の説明は良いことではない。私は自分の問題がより簡単だと思う。私はC#フォームでうまくいきました。しかしWPF私はそれを行うことはできません。私は再び説明しようとします:食卓を維持する形があります。食卓では、私はDataGridで移動することができます。私はコンボボックス以外のフォーム更新のすべてのフィールドを別のレコードを選択します。コンボボックスは、最初のカテゴリのみを表示します。私の期待は、コンボが関連カテゴリを表示するグリッド上の別のレコードを選択するときです。画像をご覧ください。ありがとうございます – Zoltan

+0

@Zoltan親愛なるゾルタンさん、コードに少なくとも1つのエラーがあります。 SelectedValueプロパティ(SelectedValuePathコンボプロパティでデータを取得するため)にバインドする必要があります。他のすべてのことはバインディングの問題です。正しい方法でバインドを管理する必要があります。私はそれらに答えるために質問を追加します。 – Ilan

関連する問題