bestsource

XAML의 변수 뒤에 있는 액세스 코드

bestsource 2023. 5. 14. 10:47
반응형

XAML의 변수 뒤에 있는 액세스 코드

asp.net 파일에 있는 Sample.xaml.cs 와 같은 공용 변수에 액세스하려면 어떻게 해야 합니까?<%=VariableName%>?

몇 가지 방법이 있습니다.

  • 코드 뒤에 있는 리소스로 변수를 추가합니다.

    myWindow.Resources.Add("myResourceKey", myVariable);
    

    그런 다음 XAML에서 액세스할 수 있습니다.

    <TextBlock Text="{StaticResource myResourceKey}"/>
    

    XAML이 구문 분석된 후에 추가해야 하는 경우,DynamicResource대신 위에StaticResource.

  • 변수를 당신의 XAML에 있는 어떤 것의 속성으로 만드세요. 보통 이것은 다음을 통해 작동합니다.DataContext:

    myWindow.DataContext = myVariable;
    

    또는

    myWindow.MyProperty = myVariable;
    

    이후 XAML의 모든 사용자는 다음을 통해 액세스할 수 있습니다.Binding:

    <TextBlock Text="{Binding Path=PropertyOfMyVariable}"/>
    

    또는

    <TextBlock Text="{Binding ElementName=myWindow, Path=MyProperty}"/>
    

바인딩을 위해, 만약DataContext는 사용 중이 아니므로 뒤에 있는 코드의 생성자에 간단히 추가할 수 있습니다.

this.DataContext = this;

이를 사용하면 코드의 모든 속성이 바인딩에 액세스할 수 있습니다.

<TextBlock Text="{Binding PropertyName}"/>

또 다른 방법은 XAML의 루트 요소에 이름을 지정하는 것입니다.

x:Name="root"

XAML은 코드백의 일부 클래스로 컴파일되므로 이름으로 모든 속성에 액세스할 수 있습니다.

<TextBlock Text="{Binding ElementName="root" Path=PropertyName}"/>

참고: 속성에만 액세스할 수 있고 필드에는 액세스할 수 없습니다. set;그리고.get;또는{Binding Mode = OneWay}필요합니다.단방향 바인딩을 사용하는 경우 기본 데이터는 INOTIFY를 구현해야 합니다.속성이 변경되었습니다.

WPF에서 빠르고 더러운 윈도우의 경우 윈도우의 데이터 컨텍스트를 윈도우 자체에 바인딩하는 것을 선호합니다. 이 작업은 모두 XAML에서 수행할 수 있습니다.

창 1.xaml

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    DataContext="{Binding RelativeSource={RelativeSource self}}"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <TextBlock Text="{Binding Path=MyProperty1}" />
        <TextBlock Text="{Binding Path=MyProperty2}" />
        <Button Content="Set Property Values" Click="Button_Click" />
    </StackPanel>
</Window>

Window1.xaml.cs

public partial class Window1 : Window
{
    public static readonly DependencyProperty MyProperty2Property =
        DependencyProperty.Register("MyProperty2", typeof(string), typeof(Window1), new UIPropertyMetadata(string.Empty));

    public static readonly DependencyProperty MyProperty1Property =
        DependencyProperty.Register("MyProperty1", typeof(string), typeof(Window1), new UIPropertyMetadata(string.Empty));

    public Window1()
    {
        InitializeComponent();
    }

    public string MyProperty1
    {
        get { return (string)GetValue(MyProperty1Property); }
        set { SetValue(MyProperty1Property, value); }
    }

    public string MyProperty2
    {
        get { return (string)GetValue(MyProperty2Property); }
        set { SetValue(MyProperty2Property, value); }
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // Set MyProperty1 and 2
        this.MyProperty1 = "Hello";
        this.MyProperty2 = "World";
    }
}

위의 예에서, 사용된 바인딩을 기록합니다.DataContextWindows(윈도우)에서 "데이터 컨텍스트를 사용자 자신으로 설정"으로 표시"두 텍스트 블록은 다음과 같이 바인딩됩니다.MyProperty1그리고.MyProperty2버튼에 대한 이벤트 핸들러는 이러한 값을 설정하며, 이 값은 자동으로 다음과 같이 전파됩니다.Text속성이 종속성 속성인 두 TextBlock의 속성입니다.

또한 '바인딩'은 종속성 개체의 종속성 속성에만 설정할 수 있습니다.XAML의 개체에 대해 비의존성 속성(예: 일반 속성)을 설정하려면 코드 뒤에 있는 리소스를 사용하는 Robert의 첫 번째 방법을 사용해야 합니다.

myWindow.xaml

<Window
    ...
    <TextBlock Text="{ Binding Path=testString }" />
</Window>

myWindow.xaml.cs

public partial class myWindow: Window
{
    public string testString { get; set; } = "This is a test string";

    public myWindow()
    {
        DataContext = this;
        InitializeComponent();
    }
}

중요한

  • 세트Datacontext
  • testString 반드시public
  • testString 반드시property(가진)get그리고.set)

언급URL : https://stackoverflow.com/questions/666856/access-codebehind-variable-in-xaml

반응형