Sto cercando di ottenere il contenuto di un'etichetta per associare alla proprietà stringa di un'istanza di classe senza molto successo.WPF: Associazione di un'etichetta a una proprietà di classe
XAML:
<Window x:Class="WPFBindingTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Label Height="28" Margin="12,55,106,0" Name="label1" Background="Bisque"
Content="{Binding Source=MyFoo, Path=W1}" VerticalAlignment="Top" />
<Label Height="28" Margin="12,12,106,0" Name="label2" Background="Bisque"
Content="{Binding Source=MyFoo, Path=W2}" VerticalAlignment="Top" />
<Button Height="23" HorizontalAlignment="Right" Margin="0,0,32,48"
Name="button1" VerticalAlignment="Bottom" Width="89"
Click="button1_Click">
Set Properties
</Button>
</Grid>
</Window>
C#:
namespace WPFBindingTest
{
public partial class Window1 : Window
{
public Foo MyFoo;
public Window1()
{
InitializeComponent();
MyFoo = new Foo();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
MyFoo.W1 = "Hello";
MyFoo.W2 = "Dave";
}
}
public class Foo
{
public string W1 { get; set; }
public string W2 { get; set; }
}
}
cioè quando clicco il bottone, ho impostato le proprietà di MyFoo a "Ciao" e "Dave", e voglio che riflette nella etichette sull'interfaccia utente. Ho impostato il contenuto come vincolante ma qualcosa non è giusto. Cosa sto facendo di sbagliato qui?
Grazie, questo mi ha segnalato nella giusta direzione. Made Foo implementa INotifyPropertyChanged, quindi imposta il DataContext di Window1 su quello di BindingList, che contiene MyFoo. Il contenuto dell'etichetta è ora: {Percorso obbligatorio = W1, UpdateSourceTrigger = PropertyChanged} E funziona a meraviglia! –
Gareth
@Vlad Qual è la differenza tra l'utilizzo di 'DependencyProperty' e l'implementazione di' INotifyPropertyChanged' o dovrebbe essere una questione di se stesso? – ywm
@ymw: questa è una domanda diversa, in effetti piuttosto grande. In breve: entrambi funzioneranno solo per il binding, ma 'INotifyPropertyChanged' è più leggero,' DependencyProperty' tuttavia non occupa la memoria se non viene utilizzato e può essere utilizzato per animazioni, stili, modelli, ereditari (dal contenitore principale al contenuto elemento) e molto altro. Vedi ad esempio [questa risposta] (http://stackoverflow.com/a/3674530/276994). – Vlad