programing

XAML에서 매개 변수화된 생성자 호출

subpage 2023. 5. 9. 22:44
반응형

XAML에서 매개 변수화된 생성자 호출

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

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

.NET 4.0은 해답에 도전하는 새로운 기능을 제공하지만, 분명히 UWP 애플리케이션(WPF가 아님)에만 해당됩니다.

x:인수 지시문

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

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>

사람이 그렇다고 가정하면

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

유감스럽게도, 당신은 다음을 묶을 수 없습니다.ConstructorParameters여기서 해결 방법을 확인하십시오.

언급URL : https://stackoverflow.com/questions/1083159/calling-a-parameterized-constructor-from-xaml

반응형