다른 사람들이 사용하는 컨트롤이 있습니다. 10 진수 값에 바인딩되는 TexBox가 있습니다. Precision은 다양 할 수 있기 때문에 DependencyProperty 및 MultiBinding을 사용하여 지정합니다. TextBox에 포커스가 설정되지 않은 경우 숫자는 지정된 정밀도로 표시되어야하지만 포커스가 설정되면 전체 숫자가 표시되어야합니다.TextBox의 포커스가 맞았는지 여부와 다른 Decimal Precision을 표시하는 가장 좋은 방법은 무엇입니까?
예 :
- 정밀 : 2
- 사용자 입력 : 집중하지 29.333
- 텍스트 상자가 표시되어야합니다 : 29.33을 표시해야합니다 집중
- 텍스트 상자 : 29.333
내가 성취 한 이것은 IMultibindingConverter와 IsFocused 속성을 사용합니다. 그러나 이것이 최선의 접근법인지는 모르겠습니다.
내 TexBox는 다음과 같이 정의된다
<UserControl.Resources>
<conv:ValuePrecisionConverter x:Key="ValuePrecisionConverter" />
</UserControl.Resources>
<TextBox x:Name="myTextBox">
<TextBox.Text>
<MultiBinding Converter="{StaticResource ValuePrecisionConverter}" Mode="TwoWay"
NotifyOnValidationError="true">
<Binding ElementName="parent" UpdateSourceTrigger="PropertyChanged" Path="Value" Mode="TwoWay" />
<Binding ElementName="parent" Path="Precision"/>
<Binding ElementName="parent" Path="AdditionalFormatting"/>
<Binding ElementName="myTextBox" Path="IsFocused" Mode="OneWay"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
내 ValuePrecisionConver는 다음과 같이 정의된다 :
public class ValuePrecisionConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double? value = null;
converter = null;
value = System.Convert.ToDouble(values[0]);
precision = System.Convert.ToInt32(values[1]);
//Other code with 3rd parameter
if (values.Count() > 3)
{
bool isFocused = System.Convert.ToBoolean(values[3]);
if (isFocused)
return value.ToString();
}
/*Here I do the formating with the given precision*/
return formattedValue;
}
}
이 내가 원하는 것을 달성하는 가장 좋은 방법이 있나요? IsFocused 속성을 사용하는 것이 좋습니까?
여기 MuiltBinding의 필요가 없습니다 ... , 그것은 내 컨트롤을 사용하는 사람에 따라 다릅니다. 또한 특수 형식이 추가 될 수도 있습니다. 당신의 제안으로 그것을 어떻게 성취합니까? – Dzyann
StringFormat을 동적 값으로 바인딩 할 수 있습니다. StringFormat = {Binding ...} 또는 StringFormat = {StaticResource ...}. 더 많은 정보 StringFormat http://msdn.microsoft.com/es-es/library/system.string.format(v=vs.110).aspx – PakKkO
좋은 행동에 대한 UpdateSourceTrigger를 제거하십시오 !!! – PakKkO