Potřebuji vlastní třídu, která bude obsahovat následující properties: Count, Value, Amount. Platí vzorec
- Kód: Vybrat vše
Amount = Count * Value
Abych mohl využít Binding, deklaroval jsem si je všechny jako DependencyProperty. Problém ale mám s Amount - chci, aby byla pouze readonly (použiji na ni pouze OneWay Binding) a její hodnota se měnila podle toho, jak nastavuji Count a Value. Toho se mi ale nijak nedaří docílit - vím jak nastavit callback pro Count a Value, ale už nevím, jak přinutit Amount, aby se znovu vyhodnotila - a projevil se tak daný OneWay Binding. Zkoušel jsem něco takového :
- Kód: Vybrat vše
public static readonly DependencyProperty UnitsProperty = DependencyProperty.Register("Units", typeof(double), typeof(AmountGridRow), new PropertyMetadata(OnAmountChangedCallBack));
public double Units
{
get { return (double)GetValue(UnitsProperty); }
set { SetValue(UnitsProperty, value); }
}
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(AmountGridRow), new PropertyMetadata(OnAmountChangedCallBack));
public int Value
{
get { return (int)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
static void OnAmountChangedCallBack(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
obj.InvalidateProperty(AmountProperty);
}
public static readonly DependencyPropertyKey AmountProperty = DependencyProperty.RegisterReadOnly("Amount", typeof(double), typeof(AmountGridRow), new PropertyMetadata(0));
public double Amount
{
get { return (double)((double)GetValue(UnitsProperty) * (int)GetValue(ValueProperty)); }
set { throw new Exception("An attempt to modify Read-Only property"); }
}
(své naděje jsem sázel právě na obj.InvalidateProperty(AmountProperty); ale bez výsledku)
Samozřejmě se na svůj readonly požadavek můžu vykašlat, ale to by pak šlo Amount nastavit a rozhodilo by to zmíněný vzoreček...
Díky za nápovědu
