2017-10-23 13 views
2

Xamarin.Forms 프로젝트에서 저는 텍스트를 레이블링하기 위해 많은 정수 값을 바인딩하는 것으로 나타났습니다. 예를 들어 :Xamarin.Forms 바인딩 - 코드에서 암시 적 유형 변환이 수행되고 있지만 XAML에서는 수행되지 않았습니까?

myLabel.SetBinding(Label.TextProperty, nameof(MyViewModel.TotalQty)); 

경우 MyViewModel.TotalQtyint입니다.

This article from the Xamarin guide는 말한다 :

Xamarin.Forms에서

는, 바인딩은 어떤 암시 적 형식 변환을 수행하지 않으며, 당신은 문자열로 문자열이 아닌 객체를 표시해야하는 경우이 형식 변환기를 제공하거나있는 StringFormat을 사용해야합니다 .

하지만 내가 사용하고있는 코드가 작동 중이므로 분명히 암시 적 유형 변환이 진행되고 있습니다. 따라서 결론적으로 기사의 문이 잘못되었거나 구식이되거나 문이 XAML에 적용되지만 코드는 적용되지 않습니다. 이 온라인에서 답을 찾는 데 어려움을 겪고 있습니다 - 아는 사람 있습니까?

+0

인용 된 텍스트가 사실이라면 이전의'Xaml' 구현과 완전히 다른 것입니다. 소스 또는 타겟 프로퍼티에 대한 명시적인'ValueSerializer' 또는'TypeConverter' 애트리뷰트가 없다면, 소스 또는 타겟 타입을위한'TypeConverter'가 사용될 것으로 기대 될 것이고, 내장 된'TypeConverter'는로 변환 될 수 있어야합니다 'String'. 'String'에 대한 디폴트 변환기는 확실히 할 수 있습니다. Xamarin에 이러한 유형이있을지라도 관계없이 C# vs Xaml에서 바인딩을 구성하는 데는 차이가 없어야합니다. 단, '트리거'유형과 다를 수 있습니다. –

+0

(분명히 답변을 드릴 수는 없지만이 질문을 관심과 함께 볼 것입니다.) –

답변

0

공식 문서에 대해서는 이야기하지 않지만 제 경험상 바인드가 객체 확장 (예 : 을 볼 수있는 값인 object처럼 사용됨)으로 설정되어 있고 내부 형식이 명시 적이어야합니다. 대상 유형에 대한 값은 일단 바인드 가능한 특성을 작성할 때 특성 유형을 설정해야합니다.

public static readonly BindableProperty MyCommandProperty = BindableProperty.Create(nameof(MyCommand), typeof(Command), typeof(MyObjectType), null, BindingMode.OneWay); 
public Command MyCommand 
{ 
    get { return (Command)GetValue(MyCommandProperty); } 
    set { SetValue(MyCommandProperty, value); } 
} 

어떤 점을주의해야 할 : 예를 들어

  • 정적 BindableProperty의 Create 방법에서, 나는 내 재산 (명령 - 2 ARG)의 실제 유형을 설정;
  • 내 재산에서는 object 값을받는 SetValue 메서드를 사용합니다.
  • 형식화 된 MyCommand 속성은 내부적으로 동일한 형식 (예 : MyProperty = new Command(() => { return; });)을 사용하고 MyProperty = string.Empty; 같은 것을 유효하지 않게 설정합니다.

XAML 코드는 마크 업 언어이며 전체 코드는 C#으로 '변환'됩니다. 자연적으로 그것을 사용하는 것에 대해 몇 가지 추측과 관습을 가질 수 있지만 동일한 규칙이 적용됩니다.

도움이되기를 바랍니다. (내 나쁜 영어에 대해 유감스럽게 생각합니다)