I\'m trying to get the content of a label to bind to the string property of a class instance without much success.
XAML:
Or give your Window a name: like NameOfWindow
and use a ElementName binding:
Content="{Binding ElementName=NameOfWindow, Path=MyFoo.W1}"
Complete sample 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" Name="NameOfWindow">
<Grid>
<Label Height="28" Margin="12,55,106,0" Name="label1" Background="Bisque" Content="{Binding ElementName=NameOfWindow, Path=MyFoo.W1}" VerticalAlignment="Top" />
<Label Height="28" Margin="12,12,106,0" Name="label2" Background="Bisque" Content="{Binding ElementName=NameOfWindow, Path=MyFoo.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>
You may make your MyFoo
a dependency property and set the DataContext
to your Window1
instance:
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}" ...>
See this article for more details.
Making MyFoo
a dependency property is not compulsory. it may work with just a property if you set the property value before assigning the DataContext
. (But never with a field.) However if you want the labels to pick up the changing values of W1
and W2
(or you don't know/care if the values are set before or after assigning the DataContect
), you need Foo
to be either a DependencyObject
, or implement interface INotifyPropertyChanged
.