我是 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}
. ;)

富國滬深
TA貢獻1790條經驗 獲得超9個贊
綁定使用反射來確定 DataContext 類型的公共屬性。這是因為您的 DataContext 可以是與視圖不同的類,通常是 MVVM 場景中的 View Model 類。
另一方面,您的事件處理程序始終在同一個類中,并且訪問修飾符private
足以訪問它。
- 2 回答
- 0 關注
- 318 瀏覽
添加回答
舉報
0/150
提交
取消