【发布时间】:2012-03-02 14:50:54
【问题描述】:
我对 WPF 很陌生,对 Caliburn.Micro 也很陌生。 我想要做的是动态创建一个组合框。 本质上,我正在尝试创建一个自动完成类型的文本框,但我似乎无法弄清楚如何动态创建组合框,或者附加到已经在 xaml 中的组合框,以便我可以更改其属性。
我的 XAML 如下:
<StackPanel>
<TextBox x:Name="customerNameTxt" Width="150" HorizontalAlignment="Stretch" cal:Message.Attach="[Event TextChanged]=[customerNameTxt_TextChanged()]" />
<ComboBox Height="20" HorizontalAlignment="Left" Name="comboBox1" VerticalAlignment="Top"
ItemsSource="{Binding DropDownSource, Mode=TwoWay}" />
</StackPanel>
如您所见,我正在绑定以填充组合框 - 我可以完美地工作,并且随着用户在文本框中键入内容而发生变化。 我只想能够更改组合框上的属性,或者动态创建它,这样我就可以访问我需要的所有属性。 我正在使用 Caliburn.micro,因此需要从 ShellModelView.cs 文件中获取组合框。
对此的任何帮助都会很棒。
更新:感谢尝试使用 WPFToolkit AutoCompleteBox 的想法。我设法让它很容易地工作,这很好,除了现在我在 ViewModel 中的代码不再使用 Caliburn.micro 检索 AutoCompleteBox 的值。玩了一会儿后,我想通了-我不确定这是否是正确的方法,但它确实对我有用。如果这不是最好的方法,我很想听听其他方法。
这是我的 XAML:
<toolkit:AutoCompleteBox x:Name="customerNameTxt" ItemsSource="{Binding DropDownSource}" IsTextCompletionEnabled="True" Grid.Row="0" Grid.Column="2" cal:Message.Attach="[Event SelectionChanged]=[Action customerNameTxt_SelectionChanged($eventargs)]" />
这是我的 ViewModel:
public void customerNameTxt_SelectionChanged(SelectionChangedEventArgs e)
{
BindObj obj = e.AddedItems[0] as BindObj;
if (null != obj)
{
customerNameTxt = obj.Text;
}
}
现在我的属性 customerNameTxt 设置为与以前一样。
任何更好的技术技巧都会很棒。正如我所说,我是 WPF 方面的新手,所以仍在学习很多东西。
谢谢,
乱七八糟
【问题讨论】:
-
ComboBox上除了显示的项目外,还需要修改哪些属性?为什么不使用预构建的自动完成功能?
标签: c# .net wpf caliburn.micro