mayho33
Goto Top

WPF XAML Properties Get Set Verständnisfrage

Hallo @ All!

Seit C# 6.0 beobachte ich, dass die Set.Methode bei Properties im DebugMode ignoriert wird.
Will ich also beim Adden etwas im Property modifizieren geht das nicht. Warum? Falsche Einstellungen in der SDK?

PSP:
private static List<string> _myProp = new List<string>();
public List<string> myProp
{
    get { return _myProp; }
    set
    {
        List<string> tmp = new List<string>();
        tmp = _myProp;
        tmp.Reverse();
        tmp.AddRange(value);
        _myProp = tmp;
        ChangeProperty();
    }
}

Danke für eure Hilfe!

Grüße Mayho

Content-ID: 332453

Url: https://administrator.de/contentid/332453

Ausgedruckt am: 24.11.2024 um 19:11 Uhr

MttKrb
MttKrb 17.03.2017 aktualisiert um 13:02:33 Uhr
Goto Top
Hi,
das set wird nur aufgerufen, wenn die Property neu gesetzt wird. Z.B.:
myProp=new List<string>()
Bei
myProp.Add(...)
oder anderer Methoden wird die Property ja nicht neu gesetzt. Das verhalten ist übrigens nicht nur seit C#6.0 so. Der Debug-Mode hat damit auch nichts zu tun.

Willst du Änderungen wie Add, Remove usw innerhalb einer Liste überwachen, so empfiehlt sich eher eine
 ObservableCollection<T> 
Anschließend noch einen Handler auf das CollectionChanged-Event der Collection registrieren und innerhalb dieses Handlers deine Operationen ausführen.
myProp.CollectionChanged += (s, e) => 
{
    //Do Something
};

Gruß
mayho33
mayho33 17.03.2017 um 13:58:47 Uhr
Goto Top
Hi MttKrb!

Danke für deine Antwort! Ist mir echt nie aufgefallen (??)

Hatte ursprünglich eine ObservableCollection<T> in Verbindung mit einem ItemsControl auf eine Wrappanel mit Dockpanel und StackPanel als SubItems.

Im DockPanel befindet sich ein Label und ein Textblock, im Stackpanel soviele Textblöcke wie in einer ListView markiert werden. Leider habe ich es nicht zum laufen gebracht, dass das Dockpanel nur 1x, das Stackpanel aber entsprechend zur ListView aktualisiert werden (immer soviele Dockpanels wie ListView.Items). In etwa so:

XAML:
<StackPanel>
                <TextBlock Style="{StaticResource HeaderLabelTB}" Text="Summary:" />  
                <Separator Height="10" Background="Transparent" />  
                <ItemsControl ItemsSource="{Binding SummaryPointsHeader, Mode=TwoWay,      UpdateSourceTrigger=PropertyChanged}">  
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <WrapPanel>
                                <DockPanel>
                                    <Label
                                        HorizontalAlignment="Left"  
                                        VerticalAlignment="Top"  
                                        Content="{Binding SummaryNumber, Converter={StaticResource SummaryConverter_Number}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  
                                        FontSize="20"  
                                        FontWeight="Bold"  
                                        Style="{StaticResource SummaryPoint}" />  
                                    <Separator Width="10" Background="Transparent" />  
                                    <TextBlock
                                        HorizontalAlignment="Left"  
                                        VerticalAlignment="Center"  
                                        FontSize="20"  
                                        FontWeight="Bold"  
                                        Style="{StaticResource HeaderLabelTB}"  
                                        Text="{Binding SummaryHeader, Converter={StaticResource SummaryConverter_Header}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />  
                                </DockPanel>
                                <StackPanel>
                                    <TextBlock
                                            FontSize="12"  
                                            FontWeight="Bold"  
                                            Style="{StaticResource FolderLabelTB}"  
                                            Text="{Binding Path=SummaryItem, Converter={StaticResource SummaryConverter_Items}}" />  

                                </StackPanel>
                            </WrapPanel>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
                
            </StackPanel>

MODEL:
private static ObservableCollection<Summary_Model> _SummaryPointsHeader = new ObservableCollection<Summary_Model>();
        public static ObservableCollection<Summary_Model> SummaryPointsHeader
        {
            get { return _SummaryPointsHeader; }
            set
            {
                _SummaryPointsHeader = value;
                ChangeProperty_STATIC();
            }
        }

public class Summary_Model
    {
        public string SummaryNumber { get; set; }
        public string SummaryHeader { get; set; }
        public List<string> SummaryItem { get; set; }
    }

Wollte deshalb im Setter von ObservableCollection<Summary_Model>() modifizieren. Woran ich gescheitert bin face-smile
Danke für den Tipp! Probiere ich gleich mal aus. Oder habe ich einfach ein Problem mit meinem ItemsControl? XAML ist tlw. echt heavy für mich!!

Grüße!
MttKrb
Lösung MttKrb 17.03.2017 um 14:53:31 Uhr
Goto Top
Die itemsSource scheint ja richtig gesetzt zu sein. Sonst im Debug-Mode mal in den Output vom Visaul Studio gucken, ob dort Binding-Fehler auftauchen.
mayho33
mayho33 19.03.2017 um 16:07:43 Uhr
Goto Top
Hi MttKrb,

Habe das ItemControl nun etwas anders aufgebaut und nun macht es wie ich es will.

das...
myProp.CollectionChanged += (s, e) => 
{
    //Do Something
};
...habe ich somit nicht benötigt.

Danke für deine Unterstützung!

Gruß!

Mayho