Источник не обновляется при изменении пользовательского интерфейса - PullRequest
1 голос
/ 02 марта 2012

У меня проблема при привязке текстового поля к значению объекта станции. Значения отображаются правильно, но когда я редактирую значения на экране, Источник не обновляется. Что я делаю не так?

    public LineControl(ArrayList cells)
    {


        InitializeComponent();
        this.cells = cells;
        foreach (Cell c in cells)
        {
            AccordionItem aci = new AccordionItem();

            StackPanel sp = new StackPanel();
            aci.Content = sp;
            DataGrid dg = new DataGrid();

            if(c.Stations!=null)
            foreach (Station s in c.Stations)
            {

                TextBox t = new TextBox();
                t.DataContext = s;
                 Binding binding = new Binding();
                 binding.Mode = BindingMode.TwoWay;
                 binding.Source = s;
                 binding.Path = new PropertyPath("Value");
                 binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                 t.SetBinding(TextBox.TextProperty, binding);
                 //t.TextChanged += new TextChangedEventHandler(t_TextChanged);

                sp.Children.Add(t);
            }
            acc.Items.Add(aci);
        }
}

Мой класс станции выглядит как

class Station
{
    public int Id { get; set; }
    public String Name { get; set; }
    public int Value { get; set;  }

}

В моем XAML нет ничего значительного:

     <UserControl x:Class="Knowles_ShiftreportEditor.LineControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:toolkit="clr-   namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="100">
<Grid>

    <toolkit:Accordion Width="100"  Name="acc" SelectionMode="One" Loaded="acc_Loaded">
    </toolkit:Accordion>
</Grid>

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Вы пытались реализовать INotifyPropertyChanged в своем классе Station?Кроме того, какой тип используется для вашей коллекции Stations в верхней части цикла foreach?

1 голос
/ 02 марта 2012

Необходимо реализовать интерфейс INotifyPropertyChanged в классе Station. Итак, ваш Station класс должен выглядеть так:

public class Station : INotifyPropertyChanged
{
    private int id;
    private String name;
    private int value;

    public int Id
    {
        get { return this.id; }
        set
        {
            this.id = value;
            NotifyPropertyChanged("Id");
        }
    }

    public String Name
    {
        get { return this.name; }
        set
        {
            this.name = value;
            NotifyPropertyChanged("Name");
        }
    }

    public int Value
    {
        get { return this.value; }
        set
        {
            this.value = value;
            NotifyPropertyChanged("Value");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

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