Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: DependencyProperty a Eventy

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Neaktivní uživatel:21.7.2014 19:46

Zdar, tento kód sem jaksi poskládal a zdá se, že funguje. Nicméně bych chtěl vědět, jestli je to napsané správně nebo jsem to akorát nějak obešel a dělá se to jinak.

UserControl MySlider

public static readonly DependencyProperty RoundValueProperty = DependencyProperty.Register("RoundValue", typeof(int), typeof(MySlider), new PropertyMetadata(0, OnRoundValueChanged));
public int RoundValue
{
    get { return (int)base.GetValue(RoundValueProperty); }
    set { base.SetValue(RoundValueProperty, value); }
}

public static void OnRoundValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    MySlider mySlider = (MySlider)d;
    if (mySlider.RoundValueChanged != null)
    {
        mySlider.RoundValueChanged(mySlider, new RoutedPropertyChangedEventArgs<int>((int)e.OldValue, (int)e.NewValue));
    }
}

public event EventHandler<RoutedPropertyChangedEventArgs<int>> RoundValueChanged;

A pak na nějaké stránce bych to chtěl použít takto:

// page.xaml
<MySlider RoundValueChanged="Karel"/>
// page.xaml.cs

 private void Karel(object sender, RoutedPropertyChangedEventArgs<int> e)
        {
            MessageBox.Show("změnilo se to!");
        }
Editováno 21.7.2014 19:47
Odpovědět
21.7.2014 19:46
Neaktivní uživatelský účet
Avatar
sadlomaslox25:21.7.2014 20:37

podle me je to docela ok. pokud delas nejakou knihovnu nebo tak, tak bych zvazil asi implementaci jako RoutedEvent. (http://msdn.microsoft.com/….110%29.aspx)
ma to pak urcite vyhody co se tyka odchytavani toho eventu i mimo danou komponentu v celem visual tree.

 
Nahoru Odpovědět
21.7.2014 20:37
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Jan Vargovský:22.7.2014 0:38
public class ClassX : UserControl
{
    public int SomeValue
    {
        get { return (int)GetValue(SomeValueProperty); }
        set { SetValue(SomeValueProperty, value); }
    }

    public static readonly DependencyProperty SomeValueProperty =
        DependencyProperty.Register("SomeValue", typeof(int), typeof(ClassX), new PropertyMetadata(0, OnSomeValueChanged));

    private static void OnSomeValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ClassX instance = (ClassX)d;
        instance.RaiseEvent(new RoutedPropertyChangedEventArgs<int>((int)e.OldValue, (int)e.NewValue, PreviewSomeValueChangedEvent));
    }

    public event RoutedPropertyChangedEventHandler<int> SomeValueChanged
    {
        add {  AddHandler(PreviewSomeValueChangedEvent, value); }
        remove { RemoveHandler(PreviewSomeValueChangedEvent, value); }
    }

    public static readonly RoutedEvent PreviewSomeValueChangedEvent =
        EventManager.RegisterRoutedEvent("SomeValueChanged", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventHandler<int>), typeof(ClassX));
}
 
Nahoru Odpovědět
22.7.2014 0:38
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.