Próbuję uzyskać zawartość etykiety, która będzie wiązała się z właściwością string instancji klasy bez większego powodzenia.WPF: Wiązanie etykiety z właściwością klasy
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; }
}
}
czyli po kliknięciu przycisku ustawić właściwości MyFoo do "Hello" i "Dave" i chcesz to odzwierciedlenie w etykiety w interfejsie użytkownika. Ustawiłem treść jako powiązanie, ale coś jest nie tak. Co ja tu robię źle?
Dzięki, ten wskazał mnie we właściwym kierunku. Wykonane narzędzie Foo INotifyPropertyChanged, a następnie ustaw DataContext okna Window1 na wartość BindingList, która zawiera MyFoo. Zawartość etykiety jest teraz: {Ścieżka powiązania = W1, UpdateSourceTrigger = PropertyChanged} I działa jak uczta! –
Gareth
@ Vlad Jaka byłaby różnica między używaniem 'DependencyProperty' i implementacją' INotifyPropertyChanged', czy też powinno to być pytanie samo w sobie? – ywm
@ymw: to inne pytanie, w rzeczywistości dość duże. W skrócie: oba będą działać tylko dla wiązania, ale 'INotifyPropertyChanged' jest bardziej lekki,' DependencyProperty' jednak nie bierze pamięci, jeśli nie jest używany i może być używany do animacji, stylizacji, szablonów, być dziedziczony (od kontenera macierzystego do zawartego element) i wiele więcej. Zobacz na przykład [ta odpowiedź] (http://stackoverflow.com/a/3674530/276994). – Vlad