我正在基于XML数据数据库的查询在运行时添加用户控件。因此,用户控件的数量是不同的。
此外,给定接收到的XML类型,我无法将用户控件绑定到从XML数据创建的列表,因为在某些情况下,我将根据这是新客户端还是现有客户端拉出不同的字段。对于现有客户,只有8个字段。新客户需要40或50个字段。
我正在基于新客户端和现有客户端创建两个用户控件之一。
我相信这是用户控件上需要的。
这是代码段。
public event RoutedEventHandler btnAddClient_Click;
private void OnButtonClick(object sender, RoutedEventArgs e)
{
if(btnAddClient_Click !=null)
{
btnAddClient_Click(this, new RoutedEventArgs());
}
}
public ucNewClient()
{
InitializeComponent();
}
我需要知道如何在动态创建的用户控件以及主窗体上设置click事件。
任何帮助将不胜感激。
我已经进行了多项研究,但没有找到帮助。我发现的是带有click事件的用户控件。但是,用户控件在运行时不是动态的。
我希望执行将客户端添加或更新到列表中的操作,以便稍后在项目中执行任务。
答案 0 :(得分:0)
欢迎来到。
每次需要在WPF中呈现项目列表时,都应使用ItemsControl或其中的一个派生类。从要在视图模型中显示的数据元素列表开始(或任何DataContext设置为):
private ObservableCollection<SomeBaseClass> _MyItems;
public ObservableCollection<SomeBaseClass> MyItems
{
get { return this._MyItems; }
set
{
if (this._MyItems != value)
{
this._MyItems = value;
RaisePropertyChanged(() => this.MyItems);
}
}
}
然后,您声明一个绑定到此列表的ItemsControl:
<ItemsControl ItemsSource="{Binding MyItems}" />
垂直的堆栈面板是默认的布局面板,但是您可以根据需要将其更改为其他内容。然后,您可以使用两种方法为要显示的每种数据类型创建一个数据模板:
<Window.Resources>
<DataTemplate DataType="{x:Type local:DataTypeA">
<TextBlock Text="This is data type A" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:DataTypeB">
<TextBlock Text="This is data type B" />
</DataTemplate>
... etc ...
</Window.Resources>
就是这样!
有时候,您可能希望根据实际数据本身来显示不同的内容,在这种情况下,您可以将单个数据模板与数据触发器一起使用:
<ControlTemplate x:Key="TemplateA">
<TextBlock Text="This is template A" />
</ControlTemplate>
<ControlTemplate x:Key="TemplateB">
<TextBlock Text="This is template B" />
</ControlTemplate>
<DataTemplate DataType="{x:Type local:SomeBaseClass}">
<ContentControl Content="{Binding}">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding SomeProperty}" Value="ValueA">
<Setter Property="Template" Value="{StaticResource TemplateA}" />
</DataTrigger>
<DataTrigger Binding="{Binding SomeProperty}" Value="ValueB">
<Setter Property="Template" Value="{StaticResource TemplateB}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>