Diskuze: DependencyProperty a Eventy

C# .NET .NET (C# a Visual Basic) DependencyProperty a Eventy American English version English version

Avatar
Posix
Člen
Avatar
Posix:

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
Proč to dělat jednoduše, když to jde složitě.
Avatar
sadlomaslox25:

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  -1 21.7.2014 20:37
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Posix
Jan Vargovský:
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.