¿Cómo puedo acceder a la variable pública que en el archivo Sample.xaml.cs como asp.net <% = VariableName%>?Variable de código de acceso en XAML
Respuesta
Hay algunas formas de hacerlo.
Añadir la variable como un recurso de código subyacente:
myWindow.Resources.Add("myResourceKey", myVariable);
A continuación, se puede acceder a él desde XAML:
<TextBlock Text="{StaticResource myResourceKey}"/>
Si tiene que añadirlo después de la XAML se analiza, puede usar un
DynamicResource
arriba en lugar deStaticResource
.Haga que la variable sea una propiedad de algo en su XAML. Por lo general, esto funciona a través de la
DataContext
:myWindow.DataContext = myVariable;
o
myWindow.MyProperty = myVariable;
Después de esto, cualquier cosa en su XAML puede acceder a él a través de un
Binding
:<TextBlock Text="{Binding Path=PropertyOfMyVariable}"/>
o
<TextBlock Text="{Binding ElementName=myWindow, Path=MyProperty}"/>
Para ventanas rápidas y sucias en WPF, prefiero vincular el DataContext de la Ventana a la ventana misma; esto se puede hacer todo en 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";
}
}
En el ejemplo anterior, tenga en cuenta la unión utilizado en la propiedad DataContext
en la ventana, este dice " Establezca su contexto de datos para usted ". Los dos bloques de texto están vinculados a MyProperty1
y MyProperty2
, el controlador de eventos para el botón establecerá estos valores, que se propagarán automáticamente a la propiedad Text
de los dos TextBlocks ya que las propiedades son Propiedades de dependencia.
para la unión, si DataContext
no está en uso, sólo tiene que añadir esto a la constructora del código detrás:
this.DataContext = this;
uso de este, cada propiedad en el código se hace accesible a la unión:
<TextBlock Text="{Binding PropertyName}"/>
Otra forma es simplemente dar un nombre al elemento raíz del XAML:
x:Name="root"
Desde el XAML se compila como una clase parcial del código subyacente, podemos tener acceso a todos los bienes por nombre:
<TextBlock Text="{Binding ElementName="root" Path=PropertyName}"/>
Nota: el acceso sólo está disponible para las propiedades; no a los campos. y get;
o {Binding Mode = OneWay}
son necesarios. Si se utiliza el enlace OneWay, los datos subyacentes deben implementar INotifyPropertyChanged.
¡Gracias! Esta respuesta me ayudó. No pude usar el método DataContext porque estoy creando un control de usuario, y si configuro el contexto de datos bajo mi control, entonces mi control no podrá obtener el contexto de datos de sus padres cuando lo use en las aplicaciones. La vinculación directa a la raíz me dio el mismo resultado que estaba buscando y deja intacto el contexto de datos de mi control. –
El "{Binding PropertyName}" funciona solo en propiedad pública. – Duc
Gracias por el consejo "raíz". Funciona a pesar de que las propiedades del código subyacente no aparecen en el diseñador de enlaces visuales, lo cual es un poco confuso. –
También vale la pena señalar que un 'Enlace' solo se puede establecer en una DependencyProperty de un DependencyObject. Si desea establecer una Propiedad no Dependency (por ejemplo, una propiedad normal) en un objeto en XAML, tendrá que utilizar el primer método de Robert de usar recursos en el código subyacente.
- 1. acceso XAML controla desde C# de código subyacente
- 2. Acceso DisplayName en xaml
- 3. variable de acceso de código subyacente a través de JavaScript
- 4. Objeto instanciado XAML de acceso desde C#
- 5. VS2008 Formateador de código XAML
- 6. ¿Cómo puedo definir una variable en XAML?
- 7. rebaja R: variable de acceso desde el fragmento de código (ámbito de variable)
- 8. acceso variable concurrente en c
- 9. variable de acceso PHP en JavaScript
- 10. ¿Variable de acceso en el ámbito externo?
- 11. Llamada de función dentro del código XAML?
- 12. Cómo cambiar ItemsPanelTemplate WrapGrid ¿De código XAML?
- 13. databind de XAML al código detrás
- 14. espacio duro en XAML vs. código
- 15. Acceso WPF reglas de validación de control de código
- 16. ASP.NET: variable de sesión de acceso en global.asax
- 17. Raracidad de acceso variable en un derivado de QObject
- 18. WPF: Configuración de ItemSource en XAML contra código subyacente
- 19. Acceso a variable por nombre de cadena
- 20. RSpec acceso a spec_helper variable de sesión
- 21. Acceso variable privado de PHP desde
- 22. acceso variable fuera de la instrucción if
- 23. LINQ propiedad acceso de la variable
- 24. Javascript ámbito externo acceso variable
- 25. Acceso a la variable EJS en la lógica de Javascript
- 26. Acceso al valor de la variable pública en codeigniter controller
- 27. Salida de código variable C
- 28. Variable de matriz de acceso en sesión (CodeIgniter)
- 29. ¿Variable de acceso desde otro espacio de trabajo en Matlab?
- 30. preprocesador de C# - Código de bloqueo para el diseñador XAML
[Esta pregunta también puede ser útil] (http://stackoverflow.com/questions/1481130/wpf-binding-to-local-variable) ya que es un poco más reciente ... – Brendan