Вопрос о поле со списком и ярлыках - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть комбинированное окно, которое содержит 5 предметов. У меня есть один ярлык на окне. Я хотел бы, чтобы каждый раз, когда пользователь нажимал на один из элементов в выпадающем списке, текст заполнял эту метку. Я хотел бы показать информацию о том, какой элемент выбран (IP-адрес и т. Д.). Любая помощь приветствуется. Спасибо.

Код:

private void cmbGroups_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    //Combo box selection changed. Re-bind data 
    string selectedGroup = (string)cmbGroups.SelectedItem; 
    BindGrid(selectedGroup); 
} 

Код:

    private void BindGrid(string selectedGroup)
    {
        //Re-bind the grid
        dgPortStatus.DataContext = _dicPortStatus[selectedGroup].Portstatus.DefaultView;

        InitializeColumns();
    }

Код:

private void _UpdatePortStatus()
    {
        string[] files = Directory.GetFiles(System.Configuration.ConfigurationSettings.AppSettings["portStatusDir"], "PortStatus.*");

        foreach (string file in files)
        {

            PortStatus ps = new PortStatus();
            ps.ReadXml(new StreamReader(file));
            //ps.ReadXml(new FileStream(file, FileMode.Open, FileAccess.Read));

            if (!_dicPortStatus.ContainsKey(ps.General[0].Group))
            {
                _dicPortStatus.Add(ps.General[0].Group, ps);
            }

            PortStatus psOrig = _dicPortStatus[ps.General[0].Group];

            foreach (PortStatus.PortstatusRow psr in ps.Portstatus.Rows)
            {
                DataRow[] drs = psOrig.Portstatus.Select("PortNumber = '" + psr.PortNumber + "'");

                if (drs.Length == 1)
                {
                    DateTime curDt = DateTime.Parse(drs[0]["LastUpdateDateTimeUTC"].ToString());
                    DateTime newDt = psr.LastUpdateDateTimeUTC;

                    if (newDt > curDt)
                    {
                        drs[0]["LastUpdateDateTimeUTC"] = newDt;
                    }
                }
                else if (drs.Length == 0)
                {
                    psOrig.Portstatus.ImportRow(psr);
                }
                else
                {
                    throw new Exception("More than one of the same portnumber on PortStatus file: " + file);
                }
            }
        }

        foreach (string groupName in _dicPortStatus.Keys)
        {
            if (!cmbGroups.Items.Contains(groupName))
            {
                cmbGroups.Items.Add(groupName);
                cmbGroups.SelectedItem = groupName;
            }
        }

Код:

private Dictionary<string, PortStatus> _dicPortStatus = new Dictionary<string, PortStatus>()

Ответы [ 3 ]

2 голосов
/ 14 декабря 2010

в Win Winms:

comboBox.SelectedIndexChanged += onSelectedIndexChanged;

private void onSelectedIndexChanged(object sender, EventArgs e)
{
  object item = comboBox.SelectedItem;
  string text = //get text from item
  label.Text = text;
}
2 голосов
/ 14 декабря 2010
<ComboBox Name="ComboBox1">
...
<ComboBox />

<Label Text="{Binding ElementName=ComboBox1, Path=SelectedItem}" />

- РЕДАКТИРОВАТЬ -

Расширенный пример :

    <StackPanel>
        <ComboBox Name="ComboBox1"
                  DisplayMemberPath="FirstName"></ComboBox>
        <StackPanel DataContext="{Binding ElementName=ComboBox1, Path=SelectedValue}">
            <Label Content="{Binding FirstName}" />
            <Label Content="{Binding LastName}" />
            <Label Content="{Binding Age}" />
        </StackPanel>
    </StackPanel>

Код:

        InitializeComponent();

        ObservableCollection<Person> persons = new ObservableCollection<Person>() { 
            new Person(){ FirstName = "John", LastName = "Doe", Age = 25 },
            new Person(){ FirstName = "John", LastName = "Smith", Age = 35 },
            new Person(){ FirstName = "Susan", LastName = "Smith", Age = 31 },
            new Person(){ FirstName = "Anthony", LastName = "Jones", Age = 31 },
        };

        ComboBox1.ItemsSource = persons;

Класс:

public class Person
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public Int32 Age { get; set; }
}

- РЕДАКТИРОВАТЬ: 2 -

Создать новый класс:

class GroupInfo
{
    public String GroupName { get; set; }
    public String IP { get; set; }
}

и изменить свой код следующим образом:

    foreach (string groupName in _dicPortStatus.Keys)
    {
        if (!cmbGroups.Items.Contains(groupName))
        {
            cmbGroups.Items.Add(new GroupInfo(){ GroupName = groupName, IP = <Write Code to get IP>);
            cmbGroups.SelectedItem = groupName;
        }
    }

Измените XAML на следующее:

<ComboBox Name="ComboBox1" DisplayMemberPath="GroupName">
    ...
<ComboBox />

<Label Text="{Binding ElementName=ComboBox1, Path=SelectedItem.IP}" />
0 голосов
/ 14 декабря 2010

Привет, ты можешь попробовать что-то вроде этого

private void ComboBox1_SelectedIndexChanged(object sender, 
    System.EventArgs e)
{

    ComboBox comboBox = (ComboBox) sender;

    string myItemText = (string) ComboBox1.SelectedItem;

    // populate
    MyTextBox.Text = myItemText;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...