2010-12-29 5 views
0

私はアイデアが非常に必要です。MVVM:強く型付けされたDataContextを持つバインディングコンバータ

これは私を気にするものである:

私は「DropDownView」 は、これは私がそれを使用する方法であるという名前の、1つのビューを持っている:

<control:DropDownView DataContext="{Binding StronglyTypedViewModel}"/> 

意味、親ページのViewModelに、私が持っていることStronglyTypedViewModel<T>

今、ビューが表示されるとき、これはすべて私が期待するように完全に動作します。

しかし、DropDownViewからこれらの数行は厄介な行動である:

<ctrl:CustomDropDown x:Name="cc" 
            ItemsSource="{Binding ControlData}" 
            ItemTemplate="{Binding ControlItemTemplate}" 
            SelectedItem="{Binding ControlSelectedItem, ConverterParameter={Binding ControlData}, Converter={Binding}, Mode=TwoWay}" 
... 

のSelectedItemコンバータのプロパティを設定すると、私は実行時例外を取得:バインドでエラーが発生しました...それがなければ 、私が見ることができますドロップダウン値が期待どおりに設定されています(カスタムItemTemplateがバインドされています)。ただし、object.ToString()

私は強くて、私は強くViewModelにに宣言されているコンバータを、入力したはずです意味、ViewModelにを入力した:私は、コンパイル時にビューモデルの種類が分からないため、

public class SMOEntityProcessingViewModel<T> : CustomViewModelBase, IValueConverter 
... 
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 

しかし、 、私は...コンバータを使用することができるViewModelに、ため

をStaticResourceを追加することはできませんすべてのヘルプは高く評価され... おかげ

@devdigital

ObservableCollection<T> ControlData; 
object ControlSelectedItem; 
ControlItemTemplate = Helpers.XAML.Methods.GenerateDataTemplate("{Binding Path=" + _propertyToShow + "}"); 
---------generating this in VM constructor, _propertyToShow depends on the T 

すなわち

"<DataTemplate "); 
"xmlns='http://schemas.microsoft.com/winfx/" 
"2006/xaml/presentation' " 
"xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' >" 
"<TextBlock Text='" + _propertyToShow + "' />" 
"</DataTemplate>" 

それがまだ進行中であるので、私は、まだコンバーターを作成する方法がわからない...

あなたは、さらに詳細が必要な場合は私に知らせてください、または、私はメールでいくつかの小さなデモを送信することができます... 興味を持っていただきありがとうございます...

答えて

0

あなたのビューモデルは、関連するvのプレゼンテーションロジック見る。コンバータコードを新しいタイプに分けて、必要に応じてこれをリソースとして追加することができます。また、CustomDropDown型がItemsControlから派生していると仮定すると、DisplayMemberPathプロパティを使用して、表示されるデータバインドされたオブジェクトのプロパティを設定したり、詳細な書式設定が必要な場合はItemTemplateプロパティを設定できます。

+0

ベースコントロールはオートコンプリートボックスです。 ValueMemberPathがbinded-> runtimeの場合は; 代わりにValueMemberBinding-> appがフリーズした場合。 分離されたConverterは、何が入ってくるTypeと、どのPropertyを変換するかを何とか知っているはずです... DropDownViewにパラメータ(dependencyproperty)を渡してConverterでバインドすることを検討する必要がありますか? – dvox

+0

もう少しコードを見ずに言うのは難しいです。 ControlDataとControlSelectedItemの型は何ですか?ControlItemTemplateの外観は何ですか?別のコンバータを作成し、役立つ完全なコードを投稿してください。 – devdigital