2017-10-03 4 views
0

UserControlListBoxDoubleUpDown이 있습니다. ListBox에서 해당 항목을 선택하면 DoubleUpDown의 및 Value을 설정하여 사용자가 Value을 미리 정의 된 범위가 아니라 특정 값 주변의 일부 범위로 변경할 수 있습니다. 이 코드를 사용최소 및 최대 후의 DoubleUpDown 값

<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> 

나는이 값이있는 경우 문제는이 코드를 먼저 Value를 설정하고 그 후 MinimumMaximum을 설정하는 것이 있습니다 :

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

범위 를 들어 는 4.8이고, 에 대한 범위는 2이다.은 0..2이다. 내가 먼저 의 범위가 여전히 활성화되어있을 때 값이 삽입되어 있기 때문에 다음 이의 Two.MyVal = 4 모양을 선택합니다.

코드를 변경하여 MinimumMaximum을 먼저 설정 한 다음 Value을 설정하면 어떻게됩니까?

+1

실제로 그런 경우 100 % 확신 할 수는 없지만 XAML에서 속성을 설정하는 순서에 따라 초기화/할당 방법이 결정됩니다. 예 :'

+0

네, 맞습니다. 나는 이것이 정말로 100 % 시간이 걸리기를 바란다 :-) – Artholl

답변

1

Official Design Recommendations 상태

이 있는지 확인, 속성이 자신의 컨트롤을 설계 할 때 기본적으로 의미 객체

의 임시 유효하지 않은 상태 되더라도 임의의 순서로 설정할 수 있도록 허용 초기화가 완료 될 때까지 (IsInitializedtrue이고 Initialized 이벤트가 시작될 때까지) 온 전성 검사를 생략하십시오.

분명히 DoubleUpDown은 정확한 문제를 염두에두고 설계되지 않았으며 초기화가 완료되기 전에 Min/Max 경계를 적용했습니다.

편집 : 공개 소스 코드 this particular control은 계정에 IsInitialized을 차지하는 것으로 보이므로 문제가 실제로 발생해서는 안됩니다.

Xaml 파서는 내가 발견 한 문서에서 명시 적으로 언급하지는 않았지만 객체 속성을 발생한 순서대로 설정합니다.


가능한 해결 방법 :

당신은 마지막으로 Value 속성을 설정하여이 문제를 해결 할 수 있어야한다.