WPF: Binding a Label to a class property

后端 未结 2 621
心在旅途
心在旅途 2021-02-04 00:05

I\'m trying to get the content of a label to bind to the string property of a class instance without much success.

XAML:



        
相关标签:
2条回答
  • 2021-02-04 00:13

    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> 
    
    0 讨论(0)
  • 2021-02-04 00:24

    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.

    0 讨论(0)
提交回复
热议问题