ứng dụng Silverlight 3 với TabControl được ràng buộc với ObservableCollection bằng cách sử dụng một IValueConverter. Ban đầu các công trình liên kết (chuyển đổi được gọi) khi khởi động ứng dụng. Thay đổi, Xóa() hoặc Thêm(), vào bộ sưu tập bị ràng buộc không được phản ánh trong trình chuyển đổi TabControl ... không được gọi.Silverlight TabControl bị ràng buộc với ObservableCollection <string> không cập nhật khi bộ sưu tập thay đổi
lưu ý: Hộp danh sách bị ràng buộc phản ánh các thay đổi đối với bộ sưu tập bị ràng buộc trong khi TabControl thì không.
Ý tưởng?
/JHD
Các XAML ràng buộc ...
<UserControl.Resources>
<local:ViewModel x:Key="TheViewModel"/>
<local:TabConverter x:Key="TabConverter" />
</UserControl.Resources>
<StackPanel DataContext="{StaticResource TheViewModel}">
<ListBox ItemsSource="{Binding Classnames}" />
<controls:TabControl x:Name="TheTabControl"
ItemsSource="{Binding Classnames, Converter={StaticResource TabConverter}, ConverterParameter=SomeParameter}"/>
<Button Click="Button_Click" Content="Change ObservableCollection" />
</StackPanel>
ViewModel ...
namespace DatabindingSpike
{
public class ViewModel
{
private ObservableCollection<string> _classnames = new ObservableCollection<string>();
public ViewModel()
{
_classnames.Add("default 1 of 2");
_classnames.Add("default 2 of 2");
}
public ObservableCollection<string> Classnames
{
get { return _classnames; }
set { _classnames = value; }
}
}
}
Bộ chuyển đổi (cho đầy đủ) ...
namespace DatabindingSpike
{
public class TabConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var source = value as ObservableCollection<string>;
if (source == null)
return null;
var param = parameter as string;
if (string.IsNullOrEmpty(param) || param != "SomeParameter")
throw new NotImplementedException("Null or unknow parameter pasased to the tab converter");
var tabItems = new List<TabItem>();
foreach (string classname in source)
{
var tabItem = new TabItem
{
Header = classname,
Content = new Button {Content = classname}
};
tabItems.Add(tabItem);
}
return tabItems;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Bất kỳ cơ hội chế độ mặc định là OneTime? Sẽ thử thiết lập chế độ một cách rõ ràng. /jhd –
Đã thử Chế độ rõ ràng = OneWay, không có niềm vui. Tôi sẽ sử dụng sự kiện CollectionChanged và thiết lập lại TabControl.ItemsSource cho đến khi tôi tìm ra cách tốt hơn./jhd –
Tôi đã tạo điều khiển tab mở rộng hoạt động chính xác với lớp ObservableCollection. http://vortexwolf.wordpress.com/2011/04/09/silverlight-tabcontrol-with-data-binding/ – vorrtex