我正在构建一个工具,并希望有一个带有参数的列表视图。
我有一个名为 Parameter 的基类和许多不同的派生类,例如:ParameterAddress、ParameterBool、ParameterString、ParameterScreen,...
每个参数看起来有点不同..
ParameterBool:标签+复选框
参数字符串:标签+文本框
参数地址:标签+文本框+按钮(用于新对话框)
...
我在第一次尝试使用 DataTemplateSelector 时就做到了这一点。
很好,工作“很好”..
在我的窗口中,我实现了文本更改、单击按钮等事件。
但现在我也想在另一个窗口中使用这个参数视图并且不想复制相同的文本更改,再次在每个窗口中单击按钮事件..
所以我的第二次尝试是将它构建到我的参数类中。
每个 Parameter 类都有一个 Stackpanel,每个派生类都将其控件添加到其中,因此可以在一个地方处理任何事件!
但现在在我的列表视图中只出现文本 "....Stackpanel" 。
我认为方式 1 是一个更好的方向,方式 2 无论如何都可以工作..
但是什么是“最好的”方式?
编辑
这是我的实际数据模板:
<Window.Resources>
<DataTemplate x:Key="textBoxTemplate">
<TextBox Text="{Binding Path=Value}" Width="100"></TextBox>
</DataTemplate>
<DataTemplate x:Key="checkBoxTemplate">
<CheckBox IsChecked="{Binding Path=Value}" IsThreeState="False"></CheckBox>
</DataTemplate>
<DataTemplate x:Key="screen_template">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Path=Value}" Width="100"></TextBox>
<Button Content="..." Click="btn_screenlist_Click" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="address_template">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Path=Value}" Width="100"></TextBox>
<Button Content="..." Click="btn_address_Click" />
</StackPanel>
</DataTemplate>
<local:ParameterTemplateSelector
x:Key="parameterTemplateSelector"
TextBoxTemplate="{StaticResource textBoxTemplate}"
CheckBoxTemplate="{StaticResource checkBoxTemplate}"
Screen_template="{StaticResource screen_template}"
Address_template="{StaticResource address_template}"
/>
</Window.Resources>
在我看来它非常无法使用..
您必须维护如此多的代码和平才能工作..
创建一个新模板
放入datatemplate资源
不要忘记将它放入 datatemplateselector 类
直接在我的课堂上拥有我的“控件”,我只有这一种代码和平..?!