tags:

views:

87

answers:

3

I don't believe this: Just built a very simple form with one combobox, when user select one item, the label will display the selection. Here is my code:

<Window x:Class="WpfApplication8.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <ComboBox Height="23" Margin="139,0,19,14" Name="comboBox1" Text="Worker"
                  VerticalAlignment="Bottom" IsReadOnly="True" SelectionChanged="comboBox1_SelectionChanged">
            <ComboBoxItem Name="None" Selector.IsSelected="True">Select Target</ComboBoxItem>
            <ComboBoxItem Name="Alice">Alice</ComboBoxItem>
            <ComboBoxItem Name="Bob">Bob</ComboBoxItem>
            <ComboBoxItem Name="Chris">Chris</ComboBoxItem>
            <ComboBoxItem Name="Dan">Dan</ComboBoxItem>
        </ComboBox>
        <Label Height="28" Margin="15,0,0,14" Name="label1" 
               VerticalAlignment="Bottom" Content="Assign to: " HorizontalAlignment="Left" Width="120"></Label>
    </Grid>
</Window>

Code behind:

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    label1.Content = comboBox1.SelectedValue;
}
A: 

The following works:

    protected void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (label1 != null)
            label1.Content = ((ComboBoxItem)comboBox1.Items[comboBox1.SelectedIndex]).Content;
    }

Andrew

REA_ANDREW
A: 

Another way also, if you did not want to check if the label is null, is add the selection change handler once the window is loaded, as it would fire one before the label has loaded:

Code Behind:

    public Window1()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(Window1_Loaded);
    }

    void Window1_Loaded(object sender, RoutedEventArgs e)
    {
        comboBox1.SelectionChanged+=new SelectionChangedEventHandler(comboBox1_SelectionChanged);
    }

    protected void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        label1.Content = ((ComboBoxItem)comboBox1.Items[comboBox1.SelectedIndex]).Content;
    }

Markup:

<Grid>
    <ComboBox Height="23" Margin="139,0,19,14" Name="comboBox1" Text="Worker"
              VerticalAlignment="Bottom" IsReadOnly="True">
        <ComboBoxItem Name="None" Selector.IsSelected="True">Select Target</ComboBoxItem>
        <ComboBoxItem Name="Alice">Alice</ComboBoxItem>
        <ComboBoxItem Name="Bob">Bob</ComboBoxItem>
        <ComboBoxItem Name="Chris">Chris</ComboBoxItem>
        <ComboBoxItem Name="Dan">Dan</ComboBoxItem>
    </ComboBox>
    <Label Height="28" Margin="15,0,0,14" Name="label1" 
           VerticalAlignment="Bottom" Content="Assign to: " HorizontalAlignment="Left" Width="120"></Label>
</Grid>

Andrew

REA_ANDREW
Thanks a lot!!!!
jeffu
+1  A: 

Here's a simplified version all in xaml:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt;
  <StackPanel>  
          <ComboBox Name="comboBox1" Text="Worker" IsSynchronizedWithCurrentItem="True"
                  VerticalAlignment="Bottom" IsReadOnly="True" >
            <ComboBoxItem Name="None" Selector.IsSelected="True">Select Target</ComboBoxItem>
            <ComboBoxItem Name="Alice">Alice</ComboBoxItem>
            <ComboBoxItem Name="Bob">Bob</ComboBoxItem>
            <ComboBoxItem Name="Chris">Chris</ComboBoxItem>
            <ComboBoxItem Name="Dan">Dan</ComboBoxItem>
        </ComboBox>
        <Label Name="label1" DataContext="{Binding ElementName=comboBox1, Path=SelectedItem}"
               VerticalAlignment="Bottom" Content="{Binding Name}" HorizontalAlignment="Left"></Label>

  </StackPanel>
</Page>
Scott
Nice answer. May be use Content for the selected text though: Content="{Binding Name}" . +1 from me :-)
REA_ANDREW
Great thing about XAML, there's either 50 ways to do something or 0! ;)
Scott