Bindowanie do listView z xml, update

0

Binding:

<ListView Margin="50,12,180,99" ItemsSource="{Binding Source={StaticResource xmlDane},XPath=Wartosci/*}" IsEnabled="True" Name="listview">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="50" Header="Column 1" DisplayMemberBinding="{Binding XPath=id}"/>
                    <GridViewColumn Width="50" Header="Column 2" DisplayMemberBinding="{Binding XPath=cosik1}"/>
                    <GridViewColumn Width="50" Header="Column 3" DisplayMemberBinding="{Binding XPath=cosik2}"/>
                    <GridViewColumn Width="50" Header="Column 3" DisplayMemberBinding="{Binding XPath=boolean}"/>
                </GridView>
            </ListView.View>
        </ListView>

I tu coś zmieniam w xml:

private void zmian_Click(object sender, RoutedEventArgs e)
        {
            XElement Wart = XElement.Load("file.xml");
            var zap = from el in Wart.Elements("Wartosc")
                      where (string)el.Element("id") == "2"
                      select el;
            zap.First().Element("cosik1").Value = (Convert.ToInt16(zap.First().Element("cosik1").Value) +1).ToString();
            Wart.Save("file.xml");
        } 

Zmiana oczywiście pokazuje mi się dopiero po restarcie aplikacji. Jak to zmienić?
Wiem że jest coś takiego jak INotifyPropertyChange i INotifyColectionChange ale nie mam pojęcia jak to tu wykorzystać.

0

https://stackoverflow.com/questions/4488463/how-i-can-refresh-listview-in-wpf
https://stackoverflow.com/questions/14614809/refresh-converted-bindings-in-wpf-listview

?

Ale ogólnie to taki sposób bindowania jest dla mnie strasznie słaby, szczególnie jeśli zmieniasz te dane. Wczytaj je na etapie tworzenia VM do jakiejś kolekcji, przybinduj listę do kolekcji, następnie oddziel zapis do XMLa od modyfikacji kolekcji.

0

Już wcześniej szukając widziałem te tematy z stackowerflow. Ale nie mogąc znaleźć obiektu ICollectionView stwierdziłem że pomiędzy ListView i xml musi być kolekcja i już od jakiegoś czasu nad tym pracuję.

0

Wykorzystując StaticResource do bindowania spodziewaj się działania StaticResource - utwórz raz przy starcie programu i więcej nie zaglądaj. Odmiana tego jest DynamicResource które niestety znacznie obciąża system. Najlepiej posłuż się ObservableCollection<> którą w kodzie umieść jako publiczne property . Dokładną implementację na pewno znajdziesz w google

1 użytkowników online, w tym zalogowanych: 0, gości: 1