2012-03-02 18 views
1

私はWPFとCaliburn.Microの新機能が新しくなっています。 私がしようとしているのは、コンボボックスを動的に作成することです。 基本的に私はオートコンプリートタイプのテキストボックスを作成しようとしていますが、コンボボックスを動的に作成する方法や、xamlにあるコンボボックスにアタッチしてそのプロパティを変更する方法はわかりません。Caliburn.Micro動的にComboboxを作成する

私の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ファイルからコンボボックスを取得する必要があります。

これについての助力は素晴らしいことです。

UPDATE:アイデアのおかげで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

ComboBoxのどのプロパティを表示するかを変更する必要がありますか?なぜあなたはあらかじめビルド済みのオートコンプリートを使用していませんか? – foson

答えて

1

あなたはCaliburn.Microであなたのビューモデルからビューへのアクセス権を持っています。あなたはどちらかあなたのビューモデルにOnViewLoadedを上書きするか、ここでGetView

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

を呼び出して、あなたはあなたのビュータイプにビューオブジェクトをキャストすることができ、あなたComboBoxのインスタンスを取得するためにFindName("controlName")を呼び出すことができます。

しかし、なぜ自動補完テキストボックスの既に使用可能な実装の1つを使用していませんか?たとえば、WPF Toolkitに含まれているものがあります。

+0

こんにちは、お返事ありがとうございます。 .Net4.0用のWPF Toolkitをインストールしましたが、そこにはAutoCompleteBoxが表示されません。私が知る限り、これは完全に間違っているかもしれませんが、AutoCompleteBoxは.Net3.5に依存していますか? – Mudders

関連する問題