8

私はしばらくの間、これに対して頭を悩ませてきました。なぜ機能しないのか、よくわかりません。私はまだこのWPFビジネス全体にかなり慣れていません。

コンボボックスの XAML は次のとおりです。

<ComboBox 
    SelectedValuePath="Type.FullName"
    SelectedItem="{Binding Path=Type}"
    Name="cmoBox" />

ComboBox に入力するものは次のとおりです (myAssembly は、可能なタイプのリストを使用して作成したクラスです)

cmoBox.ItemsSource = myAssembly.PossibleTypes;

次のように、コード ビハインドで ComboBox の親要素に DataContext を設定します。

groupBox.DataContext = listBox.SelectedItem;

コンボボックスから正しい「可能なタイプ」を選択するバインディングが必要です。何も選択しません。SelectedValue と SelectedItem を試しました。ComboBox の DisplayMemberPath を別のプロパティに変更すると、表示される内容が変更されたので、完全に壊れていないことがわかりました。

何か案は???

4

3 に答える 3

12

コード ビハインドではなく xaml でバインドを設定することもできます (可能な限り、xaml ページでコード ビハインドを回避します)。myAssembly は、コントロールのコード ビハインドのプロパティであり、MyAssembly クラスのインスタンスであると想定しています...

<UserControl 
  x:Class="MyNamespace.MyControl"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  DataContext="{Binding}">

  <ComboBox 
    Width="200" 
    ItemsSource="{Binding Path=myAssembly.PossibleTypes}"
    SelectedValuePath="Type.FullName"  
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" />
</UserControl>

個人的な好みかもしれませんが、xaml にデータ バインディングを配置することをお勧めします。コード ビハインドを調べなくても、各コントロールが何にバインドされているかを簡単に確認できるからです。また、コード内から ComboBox を参照する場合は、Name だけでなく x:Name プロパティを xaml で割り当てる必要があります。

于 2009-12-08T11:15:24.333 に答える
11

XAML で を設定ItemsSource="{Binding}"し、(コード ビハインドで) を に設定DataContextmyAssembly.PossibleTypesます。

于 2008-11-22T03:29:06.543 に答える
-5

私は同意します:バインディングはXAMLにあるべきです。私は...チェックを入れました..コードの背後には何もありません。データソースはすべて再利用可能な「リソース」です。

(まあ、OK、コードビハインドコンストラクターはInitializeComponent()を呼び出します)。

于 2010-04-01T18:00:04.247 に答える