Quiero cambiar dinámicamente TextBlock de texto en mi Clase.

XAML Código:

<TextBlock Name="Footer_text"  Text=""/>

C#:

string footerMainMenuText = "Setting";
Binding  set = new Binding("");
set.Mode = BindingMode.OneWay;
set.Source = footerMainMenuText;
Footer_text.DataContext = footerMainMenuText;
Footer_text.SetBinding(TextBlock.TextProperty, set);

He comprobado última línea, y el Footer_text.Text está configurado correctamente. ( Footer_text.Text="Setting"), pero TextBlock en mi aplicación no show «Configuración». ¿Cuál es el problema aquí?

  • Has probado a quitar la Text="" de la XAML?
InformationsquelleAutor Lucas | 2012-06-30

1 Comentario

  1. 4

    Si son vinculantes – ¿por qué no hacerlo en XAML en su lugar? Mirando el código es un poco de sentido – puede ser que también acaba de ir

    Footer_text.Text = "Setting";

    Lo ideal es hacerlo en XAML o al menos algo para que lo unen a

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

    No estoy seguro de por qué obligar a una «cadena», en la que es propia para nada…¿tienes un objeto que usted necesita para unirse a la propiedad de texto?

    También el uso de

    Binding("")

    ¿Qué tiene que hacer? Una ruta en blanco? No está seguro de cuál es el destino de enlace estaría allí… ¿has probado

    Binding()

    lugar?

    Edición:

    También la razón por la que su unión no es la actualización del control, es probablemente porque no has enlazado a un objeto que implementa INotifyPropertyChanged o una interfaz similar. Los controles deben saber cuando los valores han cambiado, así que me imagino que la unión a ‘cadena’ no está dando el TextBlock la debida notificación cuando cambia

    Edit 2:

    Aquí está un ejemplo rápido de unión de trabajo:

    Mi ventana de la Ventana de la clase.cs:

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <Grid>
            <StackPanel>
            <TextBlock x:Name="txtName" Text="{Binding Name}"></TextBlock>
                <Button Click="Button_Click">Click me 1</Button>
                <Button Click="Button_Click_1">Click me 2</Button>
            </StackPanel>
        </Grid>
    </Window>

    El código detrás de la Ventana.xaml.cs

    public partial class MainWindow : Window
    {
        SomeObjectClass obj = new SomeObjectClass();
        public MainWindow()
        {
            InitializeComponent();
    
            txtName.DataContext = obj;
        }
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            obj.Name = "Hello World";
        }
    
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            obj.Name = "Goobye World";
        }
    }

    El objeto para enlazar a (con INotifyPropertyChanged)

    class SomeObjectClass : INotifyPropertyChanged
    {
        private string _name = "hello";
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        public void OnPropertyChanged(string PropertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
        }
    }

    Clic en los botones de cambios SomeObject.Nombre, pero actualiza el cuadro de texto.

    • gracias,tu código de trabajo grandes. pero para mi aplicación doestn trabajo correctamente. Tengo tres clases: (Ventana)MainWindow, (clase)SomeObjetcClass y (Ventana)de la prueba. SomeObjectclass es como su clase. Mover los dos Botones de la ventana principal de la prueba. MainWindows incluido sólo TextBlock. entonces doestn trabajo. si hago clic en el Botón haga clic en me 1 de la prueba de la clase, el texto hola no cambia. ¿qué debería cambiar en el código para que el control textblock de otra clase(la prueba.cs) haciendo clic en el botón en esta clase?
    • Suena como que usted necesita algunos de matrícula – ¿eres nuevo en la programación con c#? Básicamente – si usted desea cambiar el valor de la prueba.cs, usted necesita para hacer de la ‘obj’ variable pública y pasar a la ventana principal instancia de prueba.cs así que usted puede hacer referencia a la variable obj. Yo creo que haciendo esto es, quizás, fuera del ámbito de lo StackOverflow es para 😛

Dejar respuesta

Please enter your comment!
Please enter your name here