2017-10-03 3 views
0

Ich habe eine UserControl mit einer ListBox und eine DoubleUpDown. Als ich den Artikel in der ListBox wählen möchte ich die Minimum, Maximum und die Value des DoubleUpDown einzustellen, so kann der Benutzer die Value ändern nicht aus vordefinierten Bereich, sondern in einem gewissen Bereich um den angegebenen Wert. Ich benutze diesen Code:Bind DoubleUpDown Wert nach Minimum und Maximum

<extToolkit:DoubleUpDown Increment="0.1" Value="{Binding SelectedItem.MyValue, ElementName=listBox1, UpdateSourceTrigger=PropertyChanged, Converter={conv:CheckValue}}" FormatString="0.0"> 
    <extToolkit:DoubleUpDown.Maximum> 
     <MultiBinding Converter="{conv:CorMaximum}"> 
      <Binding Path="SelectedItem.MyValue" ElementName="listBox1" /> 
      <Binding Path="SelectedItem.MaxDif" ElementName="listBox1" /> 
     </MultiBinding> 
    </extToolkit:DoubleUpDown.Maximum> 
    <extToolkit:DoubleUpDown.Minimum> 
     <MultiBinding Converter="{conv:CorMinimum}"> 
      <Binding Path="SelectedItem.MyValue" ElementName="listBox1" /> 
      <Binding Path="SelectedItem.MaxDif" ElementName="listBox1" /> 
     </MultiBinding> 
    </extToolkit:DoubleUpDown.Minimum> 
</extToolkit:DoubleUpDown> 

Das Problem ist, dass dieser Code zuerst die Value gesetzt und danach stellen Sie die Minimum und Maximum so, wenn ich diese Werte haben:

Name | MyValue | MaxDif 
----------------------- 
One | 6 | 2 
Two | 1 | 1 

Der Bereich für One ist 4.8 und der Bereich für Zwei ist 0..2. Wenn ich zuerst eins und dann zwei wähle sieht es wie die Two.MyVal = 4 aus, weil der Wert eingefügt wird, wenn der Bereich von One noch aktiv ist.

Wie ändert man den Code, um zuerst die Minimum und Maximum und danach die Value setzen?

+1

Ich bin nicht 100% sicher, ob das wirklich der Fall ist, aber aus meiner Beobachtung bestimmt die Reihenfolge, in der die Eigenschaften in XAML gesetzt sind, wie sie initialisiert/zugewiesen werden. Versuchen Sie, den Wert ** nach ** Max/Min wie zB: '

+0

Ja, Sie haben Recht. Ich hoffe nur, dass das 100% ig funktioniert :-) – Artholl

Antwort

1

Official Design Recommendations Zustand

zulassen Eigenschaften in beliebiger Reihenfolge gesetzt werden, auch wenn diese in einem temporären ungültigen Zustand des Objekts

was im Grunde bedeutet, wenn die eigene Kontrolle entwerfen, stellen Sie sicher, Lassen Sie die Plausibilitätsprüfungen aus, bis die Initialisierung abgeschlossen ist (bis IsInitializedtrue ist und das Ereignis Initialized ausgelöst wird).

Anscheinend wurde die DoubleUpDown nicht mit Ihrem genauen Problem im Hinterkopf entwickelt und erzwingt Min/Max-Grenzen vor der Initialisierung abgeschlossen ist.

Edit: Der öffentliche Quellcode von this particular control scheint IsInitialized zu berücksichtigen, so dass das Problem, das Sie haben, eigentlich nicht auftreten sollte.

Während es in keiner Dokumentation, die ich finden konnte, nicht explizit angegeben ist, setzt der Xaml Parser die Eigenschaften eines Objekts in der Reihenfolge, in der sie auftreten.


Mögliche Lösung:

sollten Sie in der Lage sein, um dieses Problem zu umgehen, indem die Value Eigenschaft letzte Einstellung.

Verwandte Themen