gpt4 book ai didi

wpf - 如何在 MVVM 模式中动态添加 UserControl?

转载 作者:行者123 更新时间:2023-12-04 02:17:41 25 4
gpt4 key购买 nike

这是帮助解释我的解释的示例源

<ItemsControl ItemsSource="{Binding PaggingButtonList}">            
<ItemsControl.ItemTemplate>
<DataTemplate>
<UserControl Name="{Binding ViewName}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

我想像上面的代码一样动态添加。不幸的是,我知道添加 View 的唯一方法是将 .所以我想知道分配给什么?部分以动态查找和添加我的项目的 View 文件。谢谢

enter image description here

最佳答案

您可以使用 ContentControl托管您的 UserControl :

 <ItemsControl ItemsSource="{Binding ViewList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding Name,Converter={StaticResource NameToContentConverter}}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

定义 ObservableCollection:
public ObservableCollection<object> ViewList { get; set; } = 
new ObservableCollection<object>();

并稍后添加内容
ViewList.Add(new View() { Name = "yourUserControlName" });

您的 View类(class):
public class View
{
public string Name { get; set; } = "";
}

由于 ContentControl.Content 期望对象并且您将其作为 string 传递
你可以使用转换器。

转换器:
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();
}
}

要了解有关激活器的更多信息,请参阅 here

Output:

关于wpf - 如何在 MVVM 模式中动态添加 UserControl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47936478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com