Development Tip

XAML에서 매개 변수가있는 생성자 호출

yourdevel 2020. 12. 15. 19:52
반응형

XAML에서 매개 변수가있는 생성자 호출


WPF를 사용하는 동안 XAML 파일에 컨트롤을 추가하면 기본 생성자가 호출됩니다.

매개 변수화 된 생성자를 호출하는 방법이 있습니까?


.NET 4.0은 답에 도전하는 새로운 기능을 제공합니다.

x : Arguments 지시어

<object ...>
    <x:Arguments>
        oneOrMoreObjectElements
    </x:Arguments>
</object>

나는 내가 여기서 파티에 늦었다는 것을 알고 있지만 아무도 WPF 규칙을 실제로 다루지 않았기 때문에 나는 차임 할 것이라고 생각했다.

XAML 친화적 인 개체의 기본 원칙 중 하나는 기본 생성자와 함께 완전히 사용할 수 있어야한다는 것입니다. 즉, 기본이 아닌 생성자를 사용할 때만 액세스 할 수있는 동작은 없습니다. XAML의 선언적 특성에 맞게 개체 매개 변수는 속성 설정기를 통해 지정됩니다. XAML에서 속성이 설정되는 순서가 중요하지 않아야한다는 규칙도 있습니다.

그러나 구현에 중요한 몇 가지 특별한 고려 사항이 있지만 관습과는 상충 될 수 있습니다.

  1. 개체를 사용하기 전에 설정 해야하는 속성이 하나 이상 있을 수 있습니다.
  2. 둘 이상의 속성은 서로 배타적 일 수 있습니다. 예를 들어, 이미지 StreamSource둘 다 설정하는 것은 의미가 없습니다 UriSource.
  3. 초기화 중에 속성이 설정 되도록 할 수 있습니다 .
  4. 하나의 속성이 다른 속성에 종속 될 수 있으며, 속성을 설정할 때 앞서 언급 한 순서 독립 규칙으로 인해 까다로울 수 있습니다.

이러한 경우를보다 쉽게 ​​처리 할 수 ​​있도록 ISupportInitialize인터페이스가 제공됩니다. 객체가 XAML에서 읽고 생성 될 때 (즉, 구문 분석), 구현하는 객체 ISupportInitialize는 특별히 처리됩니다.

  1. 기본 생성자가 호출됩니다.
  2. BeginInit() 호출됩니다.
  3. 속성은 XAML 선언에 표시된 순서대로 설정됩니다.
  4. EndInit() 호출됩니다.

BeginInit()및에 대한 호출을 추적 EndInit()하면 특정 속성 설정 요구 사항을 포함하여 적용해야하는 모든 규칙을 처리 할 수 ​​있습니다. 이것이 생성 매개 변수를 처리하는 방법입니다. 생성자 인수를 요구하지 않습니다.

참고 ISupportInitializeNotification가산하여 상기 인터페이스를 확장도 제공되며, IsInitialized속성 및 Initialized이벤트. 확장 버전을 사용하는 것이 좋습니다.


아니요. XAML이 아닙니다 [WPF 사용시].


예, ObjectDataProvider. 기본이 아닌 생성자를 호출 할 수 있습니다. 예를 들면 다음과 같습니다.

<Grid>
    <Grid.Resources>
        <ObjectDataProvider x:Key="myDataSource"
                            ObjectType="{x:Type local:Person}">
            <ObjectDataProvider.ConstructorParameters>
                <system:String>Joe</system:String>
            </ObjectDataProvider.ConstructorParameters>
        </ObjectDataProvider>
    </Grid.Resources>
    <Label Content="{Binding Source={StaticResource myDataSource}, Path=Name}"></Label>
</Grid>

Person이

public class Person
{
    public Person(string Name)
    {
        this.Name = Name;
    }
    public string Name { get; set; }
}

불행히도 ConstructorParameters. 여기에서 몇 가지 해결 방법을 참조 하십시오 .

ReferenceURL : https://stackoverflow.com/questions/1083159/calling-a-parameterized-constructor-from-xaml

반응형