2012-04-25 6 views
0

私は、それぞれ0と2である最小値と最大Block値を含む設定オブジェクトを有するComboBoxにオブジェクトをバインドする方法は変わりますが、別のオブジェクトを更新する方法はありますか?

public int Block {get;set;} 

が含まZoneオブジェクトを持っています。

有効な値の範囲でコンボボックスを表示する必要がありますが、選択した値をBlockにバインドする必要があります。

これを行うには、どのような方法が最適ですか?

私は次のことをしようとしてきた:ComboBoxControlと

var blocks = new Dictionary<string, int>(); 
for (int i = _currentZone.Constraints.Block.Min; i <= _currentZone.Constraints.Block.Max; i++) 
{ 
    blocks.Add("Block " + i, i); 
} 

var blocksCombo = new ComboBoxControl(blocks, GetCurrentBlockValue()); 

public ComboBoxControl(Dictionary<string, int> comboItems, int? selectedValue) 
{ 
    InitializeComponent(); 

    cboItems.ItemsSource = comboItems; 
    cboItems.SelectedValue = selectedValue; 
} 

combo_SelectionChangedイベントがI手動でトリガされ
<Grid> 

    <ComboBox x:Name="cboItems" 
       SelectionChanged="combo_SelectionChanged" 
       Height="25" 
       SelectedValuePath="Value"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Path=Key}"/> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

</Grid> 

として定義XAMLのように定義Blockの値を更新してください。これは理想的ではありません。

コンボボックスを辞書の項目で設定することができますが、選択した項目を変更すると値が別のオブジェクト(Block)にバインドされます。これは可能ですか?

この場合、どうすれば実装できますか?そうでない場合は、私が現在やっていることよりも、これについてもっと良い方法がありますか?私はそれはあなたが持っているXAML変えるのと同じくらい簡単だと信じ

答えて

0

...

<ComboBox x:Name="cboItems" 
      SelectionChanged="combo_SelectionChanged" 
      Height="25" 
      SelectedValuePath="Value" 
      SelectedItem="{Binding Block}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=Key}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

データコンテキストを仮定は正しく、あなたはおそらく、いくつかの点で、あなたのゾーンオブジェクトにコンボボックスのDataContextのを設定するためのセットアップ必要がありますされます、多分、コンストラクタと一緒にそれを渡す...

var blocksCombo = new ComboBoxControl(blocks, GetCurrentBlockValue(), this); 

public ComboBoxControl(Dictionary<string, int> comboItems, int? selectedValue, Zone zone) 
{ 
    InitializeComponent(); 

    cboItems.ItemsSource = comboItems; 
    cboItems.SelectedValue = selectedValue; 
    cboItems.DataContext = zone; 
} 

編集:

また、私はヘンクが正しいと思う、あなたの代わりに観察可能であることを辞書を変更する場合がありますブロックのコレクション。 (実際に実現されたブロックは単なるint型ですが、これはおそらく辞書として機能します)

0

私はすべてのことを正しく理解してくれることを願っています。あなたはコンボボックスを持っていて、特定のゾーンにバインドしたいですか?

<ComboBox ItemsSource="{Binding ValidValuesList}" ItemStringFormat="Block {0}" SelectedItem="{Binding MyZone.Block}"/> 

これは

public List<int> ValidValuesList 
{ 
    get { return new List<int> { 0, 1, 2 }; } 
} 

にして、ユーザーコントロールのDataContextの中

public Zone MyZone { get; set; } 

に結合します。

関連する問題