Caliburn.Micro动态创建Combobox

时间:2012-03-02 14:50:55

标签: c# .net wpf caliburn.micro

我是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

1 个答案:

答案 0 :(得分:1)

您可以从Caliburn.Micro中的视图模型访问该视图。您可以在视图模型中覆盖OnViewLoaded,也可以调用GetView

protected override void OnViewLoaded(object view)
{
   base.OnViewLoaded(view);
}

在这里,您可以将视图对象转换为视图类型,并调用FindName("controlName")以获取您ComboBox的实例。

但是,为什么不使用已经可用的自动完成文本框之一?例如,WPF Toolkit中包含一个。