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";
}
}
위의 예에서, 사용된 바인딩을 기록합니다.DataContext
Windows(윈도우)에서 "데이터 컨텍스트를 사용자 자신으로 설정"으로 표시"두 텍스트 블록은 다음과 같이 바인딩됩니다.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
'bestsource' 카테고리의 다른 글
Windows에서 diff 명령어에 해당하는 것은 무엇입니까? (0) | 2023.05.14 |
---|---|
LINQ: "포함" 및 람다 쿼리 (0) | 2023.05.14 |
Angular 2 비활성화 컨트롤은 form.value에 포함되지 않습니다. (0) | 2023.05.14 |
의 의 의 (0) | 2023.05.14 |
응용 프로그램이 중단 모드에 있음 - 원인을 확인할 수 없음 (0) | 2023.05.14 |