亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 WPF 中,為什么綁定的屬性是公共的,而事件訂閱是私有的?

在 WPF 中,為什么綁定的屬性是公共的,而事件訂閱是私有的?

C#
呼啦一陣風 2022-01-16 15:37:27
我是 WPF 世界的新手,剛開始閱讀 WPF。在閱讀時,我發現每當我們將某些元素綁定到該屬性后面的代碼中的屬性時,該屬性始終需要是公共的,并且即使該屬性位于 xaml.cs 文件中,也需要設置 DataContext。但是訂閱事件的方法可以是私有的。例如:在以下示例中,SelectedCountryIndex 屬性是公共的,但 Country_SelectionChanged 方法是私有的。xml文件:<ComboBox Name="Countries" SelectedIndex="{Binding SelectedCountryIndex}" SelectionChanged="Country_SelectionChanged"/>xml.cs    public partial class MainWindow : Window    {      public MainWindow()      {         InitializeComponent();         DataContext = this;      }      public int SelectedCountryIndex{ get; set; } = 0;      private void Country_SelectionChanged(object sender, SelectionChangedEventArgs e){}}現在根據這篇文章Mainwindow.xaml.cs 的類與 MainWindow.xaml 的類是部分的,因此我們可以直接編寫 Country.SelectionChanged+=Country_SelectionChanged 并且現在 Country_SelectionChanged 可以是私有的。但是為什么綁定不會發生這種情況?如果我們將屬性設置為公共,那么只有代碼有效。
查看完整描述

2 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

有一點小誤會。private void Country_SelectionChanged(...)不是您的活動;它只是事件的處理程序。仍然有一個 SelectionChanged 的公共事件。

舉個例子INotifyPropertyChanged。它有一個像這樣的事件:

public event PropertyChangedEventHandler PropertyChanged;

event是您實際使用的內容PropertyChanged += MyFooHandler

MyFooHandler 可以是公共的、私有的、內部的等。訪問器是什么并不重要,但事件需要具有適當的可見性以允許將事物連接到其中。

WPF 綁定的屬性需要公開,以便框架本身可以輕松地看到它并發揮它的魔力。幕后不僅僅是擁有{Binding Foo}. ;)


查看完整回答
反對 回復 2022-01-16
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

綁定使用反射來確定 DataContext 類型的公共屬性。這是因為您的 DataContext 可以是與視圖不同的類,通常是 MVVM 場景中的 View Model 類。

另一方面,您的事件處理程序始終在同一個類中,并且訪問修飾符private足以訪問它。


查看完整回答
反對 回復 2022-01-16
  • 2 回答
  • 0 關注
  • 318 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號