Jak uzyskać dostęp do publicznej zmiennej, która znajduje się w pliku Sample.xaml.cs, np. Asp.net <% = VariableName%>?Dostępna zmienna kodu w XAML
Odpowiedz
Istnieje kilka sposobów, aby to zrobić.
Dodaj swoją zmienną jako zasób z kodzie:
myWindow.Resources.Add("myResourceKey", myVariable);
Następnie można uzyskać do niego dostęp z XAML:
<TextBlock Text="{StaticResource myResourceKey}"/>
Jeśli trzeba je dodać po XAML zostanie przeanalizowany, możesz użyć powyższego
DynamicResource
zamiastStaticResource
.Ustaw zmienną właściwość czegoś w swoim XAML. Zwykle działa przez
DataContext
:myWindow.DataContext = myVariable;
lub
myWindow.MyProperty = myVariable;
Po tym, coś w XAML można uzyskać do niego dostęp za pośrednictwem
Binding
:<TextBlock Text="{Binding Path=PropertyOfMyVariable}"/>
lub
<TextBlock Text="{Binding ElementName=myWindow, Path=MyProperty}"/>
Dla szybkich i brudnych okien w WPF, wolę wiązać DataContext okna z samym oknem; to wszystko można zrobić w XAML.
Window1.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";
}
}
W powyższym przykładzie, zauważ wiązanie stosowany w nieruchomości DataContext
w oknie, to mówi " Skonfiguruj kontekst danych dla siebie ". Dwa bloki tekstu są powiązane z MyProperty1
i MyProperty2
, procedura obsługi zdarzenia dla przycisku ustawi te wartości, które będą automatycznie propagować do właściwości TextBlocks, ponieważ właściwości są Właściwościami zależności.
do wiązania, jeśli DataContext
nie jest używany, można po prostu dodać do konstruktora kodu tyle:
this.DataContext = this;
Używanie tego, każda nieruchomość w kodzie staje się dostępny dla wiązania:
<TextBlock Text="{Binding PropertyName}"/>
Innym sposobem jest po prostu nadać nazwę elementu głównego XAML:
x:Name="root"
Ponieważ XAML jest skompilowany jako częściowe klasy opóźnieniem kodu, możemy uzyskać dostęp do każdej nieruchomości według nazwy:
<TextBlock Text="{Binding ElementName="root" Path=PropertyName}"/>
Uwaga: dostęp jest możliwy tylko do właściwości; nie na pola. i get;
lub {Binding Mode = OneWay}
są konieczne. Jeśli używane jest wiązanie OneWay, dane podstawowe powinny implementować INotifyPropertyChanged.
Dzięki! Ta odpowiedź pomogła mi. Nie mogłem użyć metody DataContext, ponieważ tworzę formant użytkownika, a jeśli ustawię kontekst danych w ramach mojej kontroli, to moja kontrola nie będzie w stanie uzyskać datakekstu jego rodziców, kiedy używam go w aplikacjach. Wiązanie bezpośrednio z korzeniami dało mi ten sam rezultat, którego szukałem, i pozostawiło kontekst danych kontrolnych nietknięty. –
"{Binding PropertyName}" działa tylko na własności publicznej. – Duc
Dzięki za porady "root". Działa, mimo że właściwości kodu z tyłu nie są wymienione w projektowaniu powiązań wizualnych, co jest nieco mylące. –
Warto również zauważyć, że "wiązanie" można ustawić tylko na DependencyProperty obiektu zależnego. Jeśli chcesz ustawić właściwość non DependencyProperty (np. Normalną właściwość) na obiekcie w XAML, będziesz musiał użyć pierwszej metody Roberta wykorzystania zasobów w kodzie.
- 1. zmienna ta nie jest dostępna w angular.forEach
- 2. Czy dostępna jest zmienna Global Request w języku Python/Django?
- 3. Zmienna nie jest dostępna, gdy zainicjowany poza funkcją
- 4. spacja niełamiąca w XAML vs. kodu
- 5. zmienna Sphinx substytucji w blokach kodu
- 6. Tworzenie zasobu XAML z kodu bez klucza
- 7. Jak zmienić ItemsPanelTemplate WrapGrid Od kodu XAML?
- 8. Zamień znacznik w Xaml VS2010 Edytor xaml
- 9. Zmienna globalna w kontrolerze laravel
- 10. wiązania źródła obrazu w XAML
- 11. Jak zdefiniować zmienną w XAML?
- 12. Czy w kontrolerze Symfony2 dostępna jest zmienna globalna dla szablonu Twig?
- 13. StringFormat w XAML
- 14. Zmienna środowiskowa w Jenkins Pipeline
- 15. Jak wypełnić ComboBox w XAML
- 16. uczynić zmienna dostępna dla wszystkich klas, metod, funkcji i obejmuje, podobnie jak $ _POST
- 17. Dlaczego dostępna jest statyczna zmienna przestrzeni nazw z wewnątrz metody klasy wbudowanej?
- 18. Set DataContext w XAML
- 19. Skompiluj Xaml w Baml?
- 20. Stałe w XAML
- 21. Co oznacza * w XAML
- 22. TabItem w oddzielnym XAML
- 23. WPF: moc w XAML
- 24. Używanie XAML w WinForms
- 25. Tajemnica punktów w XAML
- 26. Zgłaszanie krotki w Xaml
- 27. Czy jest dostępna bezpłatna aplikacja mobilna CMS?
- 28. Sprawdź, czy intencja jest dostępna.
- 29. nie jest dostępna w bieżącym kontekście
- 30. Zmienna zmienna Lua z setfenv
[To pytanie może być również pomocne] (http://stackoverflow.com/questions/1481130/wpf-binding-to-local-variable), ponieważ jest nieco nowsza ... – Brendan