Как связать локальное свойство с элементом управления в WPF
У меня есть два элемента управления WPF
<Button HorizontalAlignment="Center"
Name="btnChange"
Click="btnChange_Click"
Content="Click Me" />
<Label Name="lblCompanyId"
HorizontalAlignment="Center"
DataContext="{Binding ElementName=_this}"
Content="{Binding Path=CompanyName}" />
Как мы видим, метка привязана к локальному свойству (в коде Behind), я не вижу никакого значения на ярлыке, когда я нажимаю кнопку...
Ниже мой код позади...
public static readonly DependencyProperty CompanyNameProperty =
DependencyProperty.Register("CompanyName", typeof(string), typeof(Window3), new UIPropertyMetadata(string.Empty));
public string CompanyName {
get { return (string)this.GetValue(CompanyNameProperty); }
set { this.SetValue(CompanyNameProperty, value); }
}
private void btnChange_Click(object sender, RoutedEventArgs e) {
this.CompanyName = "This is new company from code beind";
}
Привет,
Ответы
Ответ 1
попробовать
Content="{Binding ElementName=_this, Path=CompanyName}"
без привязки DataContext
ИЗМЕНИТЬ
У меня нет проблем с вашим кодом, назвали ваше окно x:Name="_this"
?
<Window x:Class="WpfStackOverflowSpielWiese.Window3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window3"
Height="300"
Width="300"
x:Name="_this">
<Grid>
<StackPanel>
<Button HorizontalAlignment="Center"
Name="btnChange"
Click="btnChange_Click"
Content="Click Me" />
<Label Name="lblCompanyId"
HorizontalAlignment="Center"
DataContext="{Binding ElementName=_this}"
Content="{Binding Path=CompanyName}"></Label>
</StackPanel>
</Grid>
</Window>
и действительно ли ваше окно Window3
?
public partial class Window3 : Window
{
public Window3() {
this.InitializeComponent();
}
public static readonly DependencyProperty CompanyNameProperty =
DependencyProperty.Register("CompanyName", typeof(string), typeof(Window3), new UIPropertyMetadata(string.Empty));
public string CompanyName {
get { return (string)this.GetValue(CompanyNameProperty); }
set { this.SetValue(CompanyNameProperty, value); }
}
private void btnChange_Click(object sender, RoutedEventArgs e) {
this.CompanyName = "This is new company from code beind";
}
}
надеюсь, что поможет
Ответ 2
В настоящее время вы привязываете свой ярлык DataContext
к Button
, а затем пытаетесь установить его Content
на CompanyName
, однако CompanyName
не является допустимым свойством на Button
Укажите DataContext
в вашей привязке Path
для привязки к Button.DataContext.CompanyName
вместо Button.CompanyName
Кроме того, я бы рекомендовал просто привязывать контент вместо привязки как DataContext, так и Content
<Label Content="{Binding ElementName=btnChange, Path=DataContext.CompanyName}" />
И если ваш код выглядит точно так же, как и пример кода, то оба Button
и Label
имеют одинаковый DataContext
, поэтому вы можете напрямую привязываться к CompanyName
<Label Content="{Binding CompanyName}" />
Изменить
Только что заметил, что привязка Label относится к элементу управления с именем _this
. Я предположил, что это была кнопка, хотя теперь я вижу, что имя вашей кнопки btnChange
, а не _this
.
Не важно, ответ все тот же. Вы пытаетесь привязать свойство UI Control CompanyName
, которое не является допустимым свойством.