import typing
from System import EventArgs, Array
from System.Collections import IList, IEnumerable, ICollection, IEnumerator

class INotifyCollectionChanged(typing.Protocol):
    pass


class NotifyCollectionChangedAction(typing.SupportsInt):
    @typing.overload
    def __init__(self, value : int) -> None: ...
    @typing.overload
    def __init__(self, value : int, force_if_true: bool) -> None: ...
    def __int__(self) -> int: ...
    
    # Values:
    Add : NotifyCollectionChangedAction # 0
    Remove : NotifyCollectionChangedAction # 1
    Replace : NotifyCollectionChangedAction # 2
    Move : NotifyCollectionChangedAction # 3
    Reset : NotifyCollectionChangedAction # 4


class NotifyCollectionChangedEventArgs(EventArgs):
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, changedItem: typing.Any) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, changedItem: typing.Any, index: int) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, changedItem: typing.Any, index: int, oldIndex: int) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, changedItems: IList) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, changedItems: IList, index: int, oldIndex: int) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, changedItems: IList, startingIndex: int) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, newItem: typing.Any, oldItem: typing.Any) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, newItem: typing.Any, oldItem: typing.Any, index: int) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, newItems: IList, oldItems: IList) -> None: ...
    @typing.overload
    def __init__(self, action: NotifyCollectionChangedAction, newItems: IList, oldItems: IList, startingIndex: int) -> None: ...
    @property
    def Action(self) -> NotifyCollectionChangedAction: ...
    @property
    def NewItems(self) -> IList: ...
    @property
    def NewStartingIndex(self) -> int: ...
    @property
    def OldItems(self) -> IList: ...
    @property
    def OldStartingIndex(self) -> int: ...


class StringDictionary(IEnumerable):
    def __init__(self) -> None: ...
    @property
    def Count(self) -> int: ...
    @property
    def IsSynchronized(self) -> bool: ...
    @property
    def Item(self) -> str: ...
    @Item.setter
    def Item(self, value: str) -> str: ...
    @property
    def Keys(self) -> ICollection: ...
    @property
    def SyncRoot(self) -> typing.Any: ...
    @property
    def Values(self) -> ICollection: ...
    def Add(self, key: str, value: str) -> None: ...
    def Clear(self) -> None: ...
    def ContainsKey(self, key: str) -> bool: ...
    def ContainsValue(self, value: str) -> bool: ...
    def CopyTo(self, array: Array, index: int) -> None: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Remove(self, key: str) -> None: ...

