这是帮助解释我的解释的示例源
<ItemsControl ItemsSource="{Binding PaggingButtonList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<UserControl Name="{Binding ViewName}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
我想在上面的代码中动态添加.不幸的是,添加我知道的视图的唯一方法是.所以我想知道要分配什么?用于动态查找和添加项目的View文件的部分.谢谢
您可以ContentControl用来托管您的UserControl:
<ItemsControl ItemsSource="{Binding ViewList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding Name,Converter={StaticResource NameToContentConverter}}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
定义ObservableCollection:
public ObservableCollection<object> ViewList { get; set; } =
new ObservableCollection<object>();
Run Code Online (Sandbox Code Playgroud)
并在以后添加内容
ViewList.Add(new View() { Name = "yourUserControlName" });
Run Code Online (Sandbox Code Playgroud)
你的View班级:
public class View
{
public string Name { get; set; } = "";
}
Run Code Online (Sandbox Code Playgroud)
由于ContentControl.Content期望对象,并且您将它作为一个传递,string
您可以使用Converter.
转换器:
public class NameToContentConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value != null)
{
Type userControl = Type.GetType(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name +"."+ value,null,null);
return Activator.CreateInstance(userControl);
}
return "";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
要了解有关Activator的更多信息,请参阅此处
| 归档时间: |
|
| 查看次数: |
1247 次 |
| 最近记录: |