2012-04-25 103 views
0

我有一個Zone對象,它包含如何將對象綁定到ComboBox,但在更改時更新其他對象?

public int Block {get;set;} 

我也有包含最小和最大Block值,其分別爲0和2的結構對象。

我需要顯示一個有效值範圍的組合框,但我需要將選定的值綁定到Block

我這樣做的最好方法是什麼?

我一直在嘗試以下:

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()); 

與ComboBoxControl定義爲

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

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

,並定義爲

<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當combo_SelectionChanged事件手動觸發我更新Block的值,這是不理想的。

我想要的是能夠設置與字典中的項目組合框,但是當我更改所選項目時,值綁定到不同的對象 - Block。這可能嗎?

如果是這樣,我該如何執行此操作?如果沒有,我有更好的方式去做這件事比我現在做的更好嗎?

回答

0

我相信這是因爲改變了你的XAML有那麼簡單......

<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; 
} 

編輯:

而且我認爲亨克是正確的,你可能要更改字典,而不是成爲一個可觀察座的集合。 (實際上剛剛實現的塊只是一個整數,這可能會作爲一個字典)

0

我希望我理解的一切正確。你有組合框,想要綁定到一個特定的區域?

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

這種結合

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

,並

public Zone MyZone { get; set; } 

在你的用戶控件的DataContext。

相關問題