wpf привязка изменение источника привязки - PullRequest
0 голосов
/ 11 мая 2011

У меня есть следующий класс в качестве основного окна:

public partial class Window1 : Window
{
    public Network network { get; set; }
    public DataSet data_set { get; set; }
    public Training training { get; set; }

    public string CurrentFile { get; set; }

    public MGTester tester;
    public MCTester testerSSE;

    public ChartWindow ErrorWindow;
    public ChartWindow TimesWindow;

    public Window1()
    {
        network = new Network();
        data_set = new DataSet();
        training = new Training();
        tester = new MGTester();
        testerSSE = new MCTester();
        CurrentFile = "";
        ErrorWindow = new ChartWindow();
        TimesWindow = new ChartWindow();

        InitializeComponent();

        for (int i = 0; i < tester.GetDeviceCount(); ++i)
        {
            DeviceComboBox.Items.Add(tester.GetDeviceName(i));
        }
    }...

И в моем коде xaml у меня есть:

<ListView Grid.Row="0" x:Name="NetworkListview" ItemsSource="{Binding network.Layers}" IsSynchronizedWithCurrentItem="True">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Width="100" Header="layer name" DisplayMemberBinding="{Binding Name}"/>
                            <GridViewColumn Width="60" Header="neurons" CellTemplate="{StaticResource NeuronsTemplate}"/>
                            <GridViewColumn Width="110" Header="activation" CellTemplate="{StaticResource ActivationTemplate}"/>
                        </GridView>
                    </ListView.View>
                </ListView>

В любом случае я привязываюсь к некоторому члену Window1 ...И это работает нормально, но я хочу изменить элемент, к которому привязаны элементы управления - я имею в виду, что я хочу сделать что-то подобное в Window1

this.network = new Network();

Когда я это делаю, привязка перестает работать - Как я могу легко икрасиво просто "обновить" привязку?

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Если ваш источник привязки не является UI-классом, используйте уведомляющее свойство вместо автоматического.

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

public class MyClass : INotifyPropertyChanged
{
    private Network _network;

    public Network Network
    {
        get
        {
            return _network;
        }
        set
        {
            if (value != _network)
            {
                _network = value;
                NotifyPropertyChanged(value);
            }
        }
    }


    protected NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

}

Если ваш исходный класс является UI-классом, определите Network как DependencyProperty:

http://msdn.microsoft.com/en-us/library/system.windows.dependencyproperty.aspx

Пример цитируемой выше ссылки:

public class MyStateControl : ButtonBase
{
  public MyStateControl() : base() { }
  public Boolean State
  {
    get { return (Boolean)this.GetValue(StateProperty); }
    set { this.SetValue(StateProperty, value); } 
  }
  public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
    "State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false));
}
0 голосов
/ 11 мая 2011

Существует способ обновить привязку, но в большинстве случаев есть более эффективные способы: либо превратить ваше свойство в свойство зависимостей , либо поместить данные в другой класс, реализующийINotifyPropertyChanged интерфейс.

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