2011-12-20 29 views
18

Tôi có hai điều khiển trên WPFLàm thế nào để ràng buộc tài sản địa phương về kiểm soát trong 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}" /> 

Như chúng ta có thể thấy nhãn đó là ràng buộc về tài sản địa phương (trong mã Đằng sau), tôi không thấy bất kỳ giá trị trên nhãn khi tôi bấm nút ...

Dưới đây là mã của tôi đằng sau ...

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"; 
} 

Kính trọng,

Trả lời

30

thử

Content="{Binding ElementName=_this, Path=CompanyName}" 

mà không có sự ràng buộc DataContext

EDIT

tôi không có vấn đề với mã của bạn, đã đặt tên cho cửa sổ của bạn để 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> 

và cửa sổ của bạn có thực sự là Window3 không?

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"; 
    } 
} 

hy vọng rằng sẽ giúp

+0

Cảm ơn punker76. Giải pháp của bạn đã hoạt động! Tôi chỉ cần thêm x: Name = "_ this" và boooom. – usergaro

3

Bạn đang ràng buộc của Label bạn DataContext đến một Button, và sau đó cố gắng để thiết lập nó là Content để CompanyName, tuy nhiên CompanyName không phải là một tài sản có giá trị trên Button

Chỉ định DataContext trong ràng buộc Path của bạn để liên kết với Button.DataContext.CompanyName thay vì Button.CompanyName

Ngoài ra, tôi muốn khuyên bạn nên chỉ ràng buộc các nội dung thay vì ràng buộc cả hai DataContext và Nội dung

<Label Content="{Binding ElementName=btnChange, Path=DataContext.CompanyName}" /> 

Và nếu mã của bạn trông giống hệt như mẫu mã được đăng, sau đó cả hai ButtonLabel có cùng DataContext, vì vậy bạn có thể liên kết trực tiếp đến CompanyName

<Label Content="{Binding CompanyName}" /> 

Sửa

Chỉ cần nhận thấy rằng ràng buộc của Nhãn là một điều khiển có tên là _this. Tôi đã giả định nó là Button, mặc dù tôi thấy bây giờ tên Button của bạn là btnChange, không phải là _this.

Mặc dù vậy, câu trả lời vẫn không thay đổi. Bạn đang cố gắng liên kết với thuộc tính CompanyName của Kiểm soát giao diện người dùng, đây không phải là thuộc tính hợp lệ.

+0

Tôi không thấy rằng DataContext của Nhãn liên kết với một Nút ... – punker76

+0

@ punker76 Xem chỉnh sửa của tôi. '_this' phải đề cập đến một số điều khiển giao diện người dùng và tôi nhầm lẫn giả định nó được gọi là Button vì nó là một phần của mẫu mã. Hiệu trưởng vẫn được áp dụng, ngay cả khi điều khiển không phải là Nút. – Rachel

+0

Thêm ElementName vào Binding ... chỉ là những gì tôi đã tìm kiếm tất cả các buổi chiều! Cảm ơn! – thehelix

Các vấn đề liên quan