WPFには2つのコントロールがあります
<Button HorizontalAlignment="Center"
Name="btnChange"
Click="btnChange_Click"
Content="Click Me" />
<Label Name="lblCompanyId"
HorizontalAlignment="Center"
DataContext="{Binding ElementName=_this}"
Content="{Binding Path=CompanyName}" />
ラベルが(ビハインドコードで)ローカルプロパティにバインドされていることがわかるように、ボタンをクリックしてもラベルに値が表示されません...
以下は私の背後にあるコードです...
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";
}
よろしく、
試してみる
Content="{Binding ElementName=_this, Path=CompanyName}"
DataContext
バインディングなし
[〜#〜] edit [〜#〜]
私はあなたのコードに問題はありません、あなたのウィンドウに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";
}
}
それが役立つことを願って
現在、ラベルのDataContext
をButton
にバインドしてから、Content
をCompanyName
に設定しようとしていますが、CompanyName
はそうではありませんButton
の有効なプロパティ
Button.DataContext.CompanyName
の代わりにButton.CompanyName
にバインドするには、バインディングDataContext
でPath
を指定します
また、DataContextとContentの両方をバインドするのではなく、Contentをバインドすることをお勧めします
<Label Content="{Binding ElementName=btnChange, Path=DataContext.CompanyName}" />
コードが投稿されたコードサンプルとまったく同じように見える場合、Button
とLabel
の両方が同じDataContext
を持っているので、CompanyName
に直接バインドできます。
<Label Content="{Binding CompanyName}" />
編集
ラベルのバインディングが_this
という名前のコントロールに対応していることに注意してください。ボタンの名前は_this
ではなくbtnChange
であることがわかりましたが、それがボタンであると想定していました。
しかし、それは問題ではありません、答えはまだ同じです。有効なプロパティではないUIコントロールのCompanyName
プロパティにバインドしようとしています。