我是WPF的新手,也是Caliburn.Micro的新手。 我要做的是动态创建一个组合框。 基本上我正在尝试创建一个自动完成类型的文本框,但我似乎无法弄清楚如何动态创建组合框,或者附加到已经在xaml中的组合框,以便我可以更改其属性。 / p>
我的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的新手,所以还在学习很多东西。
谢谢,
Mudders
答案 0 :(得分:1)
您可以从Caliburn.Micro中的视图模型访问该视图。您可以在视图模型中覆盖OnViewLoaded
,也可以调用GetView
protected override void OnViewLoaded(object view)
{
base.OnViewLoaded(view);
}
在这里,您可以将视图对象转换为视图类型,并调用FindName("controlName")
以获取您ComboBox
的实例。
但是,为什么不使用已经可用的自动完成文本框之一?例如,WPF Toolkit中包含一个。