WPF级联组合框到TextBox

时间:2014-12-22 21:37:14

标签: c# wpf

我是编程新手,并且在将ComboBox级联到TextBox时遇到了一些困难。雇用是我的代码:

MainWindow.xaml

Window x:Class="WpfApplication26.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid Margin="0,0,0,-1">
    <ComboBox x:Name="Category" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" SelectionChanged="Category_SelectionChanged" Margin="309,52,0,0">
        <ListBoxItem Name="clComboBoxItem1" Content="Comedy" Height="25"/>
        <ListBoxItem Name="clComboBoxItem2" Content="Drama" Height="25"/>
        <ListBoxItem Name="clComboBoxItem3" Content="Science Fisction" Height="25"/>
    </ComboBox>
    <ComboBox x:Name="Shows" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" Margin="309,79,0,0" SelectionChanged="Shows_SelectionChanged" />
    <TextBox x:Name="TextBox1" HorizontalAlignment="Left" Height="23" Margin="309,106,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>

</Grid>

MainWindow.xamlcs

namespace WpfApplication26
{

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();



    }



    private void Category_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {


        //Create List for Comedy selection
        List<fruits> dropDownList_Comedy = new List<fruits>();
        dropDownList_Comedy.Add(new fruits() { price = 10, Name = "Apples" });
        dropDownList_Comedy.Add(new fruits() { price = 9, Name = "Bammamas" });
        dropDownList_Comedy.Add(new fruits() { price = 1, Name = "Mango" });
        //Create List for Drama selection
        List<fruits> dropDownList_Drama = new List<fruits>();

        dropDownList_Drama.Add(new fruits() { price = 10, Name = "Liver"});

        //Create List for Science Fiction selection
        List<fruits> dropDownList_SciFi = new List<fruits>();

        dropDownList_SciFi.Add(new fruits() { price = 10, Name = "Apples2" });

        //Check for SelectedIndex value and assign appropriate list to 2nd
        if (Category.SelectedIndex == 0)
        {
            Shows.ItemsSource = dropDownList_Comedy;
            Shows.DisplayMemberPath = "Name";


        }
        else if (Category.SelectedIndex == 1)
        {
            Shows.ItemsSource = dropDownList_Drama;
            Shows.DisplayMemberPath = "Name";

        }
        else if (Category.SelectedIndex == 2)
        {
            Shows.ItemsSource = dropDownList_SciFi;
            Shows.DisplayMemberPath = "Name";
        }
        {

        }
    }

    private void Shows_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        {
            fruits dropDownList_Comedy = Shows.SelectedItem as fruits ;
            TextBox1.Text = Convert.ToString(dropDownList_Comedy.price);

        }

        {
            fruits dropDownList_Drama = Shows.SelectedItem as fruits;
            TextBox1.Text = Convert.ToString(dropDownList_Drama.price);
        }

        {
            fruits dropDownList_SciFi = Shows.SelectedItem as fruits;
            TextBox1.Text = Convert.ToString(dropDownList_SciFi.price);
        }
    }           
}

}

的Class1.cs

class fruits
{
    public int price { get; set; }
    public string Name { get; set; }
}

}

System.NullReferenceException存在问题。我不知道该怎么做。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您在Shows_SelectionChanged函数的第二个块中使用SelectedValue而不是SelectedItem。

SelectedValue返回一个String,无法将其解析为水果(因此它将返回null)。并且您在使用null.price时尝试访问null成员,因此它会引发NullReferenceException。

修改

如果您只想在TextBlock中显示ListBox的SelectedItem,您可以这样做:

<ListBox x:Name="MyListBox">
    ...
</ListBox>
<TextBox Text="{Binding ElementName=MyListBox, 
                        Path=SelectedItem, 
                        TargetNullValue=Nothing is selected, 
                        Mode=OneWay}"/>

在这种情况下,您不需要代码。