2014-01-23 3 views
0

Я создаю приложение для Windows 8.1 и имею следующий код:смеси/XAML: привязка ItemsSource с помощью кнопки

<ListView x:Name="listView" Height="505" Canvas.Left="35" Canvas.Top="75" Width="300" ItemTemplate="{StaticResource GroupTemplate}" ItemsSource="{Binding Groups, Mode=TwoWay, UpdateSourceTrigger=Explicit}" HorizontalAlignment="Left" VerticalAlignment="Top" UseLayoutRounding="False" ScrollViewer.VerticalScrollBarVisibility="Disabled" SelectionMode="None" /> 

<Button Height="40" Width="260" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="40" Canvas.Top="585" BorderThickness="0" Content="Overige tonen" Background="#FF9B9B9B" Style="{StaticResource ButtonStyle1}" Click="show_items2" /> 

Когда пользователь нажимает на кнопку show_items2, то ItemsSource группы должны быть заменены другим ItemsSource. Я использую SampleData «группу» из Blend, для Visual Studio 2013. У меня есть довольно очевидный код для кнопки, как показано ниже:

private void show_Medicatie2(object sender, RoutedEventArgs e) 
     { 
      // replace itemsSource with another 
     } 

Я пробовал много учебников, но ничего не швов работать. Я что-то пропустил? Помощь очень ценится. Спасибо!

ответ

0

Вы должны RaisePropertyChanged("Groups") при изменении Groups

0

класс, который вы связываясь с (в вашем случае, владелец Groups) обязан быть в INotifyPropertyChanged, так что вы можете явно указать МОФ, что привязка нуждается в обновлении. Это требование, если вы не используете DependencyProperties.

Добавьте это в определении класса:

class X : System.ComponentModel.INotifyPropertyChanged 
{ 
    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    public IEnumerable<object> Groups //Replace 'object' with the type your are using... 
    { 
     get{ return m_Groups; } 
     set 
     { 
      m_Groups = value; 

      //Raise the event to notify that the property has actually got a new value 
      var handler = PropertyChanged; 
      if(handler != null) 
       PropertyChanged(this, new PropertyChangedEventArgs("Groups")); 
     } 
    } IEnumerable<object> m_Groups = new List<object>(); 
} 

Почему это работает?

WPF знает о INotifyPropertyChanged, и когда вы используете объект как источник привязки, WPF проверяет, реализует ли он интерфейс. Если это так, WPF присоединяется к событию. Когда событие запускается, имя свойства проверяется и если оно соответствует последнему свойству в пути привязки, привязка обновляется.

Вы также можете заменить IEnumerable<T> на ObservableCollection<T>, но вскоре все начнет становиться сложнее. Я рекомендовал прочитать около ObservableCollection<T>!

Смежные вопросы