0
在UWP應用程序中,我試圖將ListBox插入到Content Control中。正如您將從我提交的代碼中看到的,ListBox的ItemsSource綁定不會向PropertyChanged事件註冊,因此當我嘗試將ItemsSource更改爲新集合時,它不會在列表中直觀地反映出來。我知道引用是正確的,因爲如果在設置綁定之前先創建新集合,屏幕將顯示列表。我需要做什麼才能使下面的代碼工作?無法在ContentControl中與ItemsControl綁定
<Page
x:Class="App2.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App2"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ContentControl Content="{x:Bind MyRootControl, Mode=OneWay}"/>
</Grid>
</Page>
和
using System.Collections.ObjectModel;
using System.ComponentModel;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;
namespace App2
{
public sealed partial class MainPage : Page, INotifyPropertyChanged
{
public MainPage()
{
this.InitializeComponent();
BindingOperations.SetBinding(MyRootControl, ItemsControl.ItemsSourceProperty, new Binding() { Source = myData, Mode = BindingMode.OneWay });
myData = new ObservableCollection<string>(new[] { "hello", "world" });
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(myData)));
}
public ObservableCollection<string> myData { get; set; } = new ObservableCollection<string>();
public ListBox MyRootControl { get; set; } = new ListBox();
public event PropertyChangedEventHandler PropertyChanged;
}
}
在派生自DependencyObject的類中實現INotifyPropertyChanged沒有任何意義。相反,'myData'應該是一個依賴屬性。目前,myData甚至不是屬性,而只是一個字段,因此不支持數據綁定。除此之外,目前還不清楚你想用它做什麼。 – Clemens
@Clemens。道歉,當試圖將問題簡化爲這個簡單的代碼示例時,出現了一些令人難以置信的疏忽。我在原來的問題中糾正了這些問題,現在仍然存在。我試圖理解爲什麼在編寫內容控件時,更改ListBox集合並沒有體現出來。轉換爲依賴屬性不會回答這個問題。 – Sean
實現INotifyPropertyChanged在這裏仍然沒有意義。除此之外,發射屬性名稱爲「myData」的PropertyChanged事件在這裏沒有效果,因爲你錯誤地設置了你的綁定。 'Binding.Source'應該是擁有屬性('this')的對象,並且'Binding.Path'應該被設置爲'new PropertyPath(「myData」)'。 – Clemens