2012-04-25 83 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。

相关问题