【问题标题】:Caliburn.Micro Create Combobox DynamicallyCaliburn.Micro 动态创建组合框
【发布时间】: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


【解决方案1】:

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

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

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

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

【讨论】:

  • 您好,感谢您的回复。我已经为 .Net4.0 安装了 WPF 工具包,但在其中看不到 AutoCompleteBox。据我所知(我可能完全错了)AutoCompleteBox 依赖于.Net3.5?
猜你喜欢
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多