2017-07-20 22 views
-1

Hallo私は新しいWPFプロジェクトにいくつか問題があります。 私は異なるオブジェクトを持つListViewを持っています。ユーザーがオブジェクトを選択すると、「詳細」もこのオブジェクトのプロパティがリストビューの横のテキストボックスに表示されます。WPFオブジェクトをテキストボックスにバインドしてDataTemplateを使用する

選択したオブジェクト - >オブジェクトは、テキストボックスに行く - >テキストボックス現在のオブジェクトデータ・テンプレート

と私は2番目リストビューでそれを修正私のテストプロジェクトでは。

private void listView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if(listView.SelectedItem is Entity) 
    { 
     listView1.Items.Clear(); 
     listView1.Items.Add(listView.SelectedItem); 
    } 
} 

データ・テンプレートは、テキストボックスのために、この例では、私は、第二のListView

<DataTemplate DataType="{x:Type local:Entity}"> 
    <TextBox Text="{Binding A1}" /> 
</DataTemplate> 

A Screenshot from my test project

私はこのスクリーンショットのような問題を解決したいためにそれを使用しますが、リストビューなし私はリストビューist迷惑なからプロパティとフォーカスをコピーする必要があるので

誰も解決を知っていますか?

ごあいさつ

+0

**このスクリーンショットのような問題を解決したいと思いますか?**どの問題がありますか? もっと正確に言えば、あなたがしようとしていることは明確ではありません。すべてのエントリを1つのリストに入れたいのですが、1つのアイテムをクリックすると、別のリストやテーブルに値を持つすべてのプロパティを表示したいのですか? –

+0

プロパティをテキストボックスに表示したい。オブジェクトタイプごとに、テキストボックスにデータテンプレートが必要です。スクリーンショットではリストビューを使用しましたが、代わりにテキストボックスを使用したいと思います。 – OneByT

+0

プロパティを表示するために、TextBoxを追加してListViewのSelectedItemに直接バインドすることができます。 () – kusi581

答えて

0

これのためのコードは必要ありません。 ListViewNameプロパティを設定するだけです。この

<ListView x:Name="MyItems" 

など例えば選択は、この

<TextBox Text="{Binding ElementName=MyItems, Path=SelectedItem.Prop1}"/> 

Prop1のように変化したときに表示したい各プロパティのTextBoxを追加表示したいプロパティの名前です。

編集 あなたのリスト内のオブジェクトの種類を持っているし、あなたがこのためにContentControlを使用することができ、異なるタイプのための別の方法でプロパティを表示したいです。あなたがタイプObjectTwoの項目を選択すると、あなたがタイプObjectOneと第二DataTemplateの項目を選択すると

<ContentControl Content="{Binding ElementName=MyItems, Path=SelectedItem}"> 
    <ContentControl.Resources> 
     <DataTemplate DataType="{x:Type local:ObjectOne}"> 
      <StackPanel> 
       <TextBox Text="{Binding Prop1}"/> 
       <TextBox Text="{Binding Prop2}"/> 
      </StackPanel> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type local:ObjectTwo}"> 
      <StackPanel> 
       <TextBox Text="{Binding Prop1}"/> 
       <TextBox Text="{Binding Prop2}"/> 
       <TextBox Text="{Binding Prop3}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ContentControl.Resources> 
</ContentControl> 

ContentControlは最初DataTemplateが表示されます。あなたが望んだ

希望;)

+0

問題は、私はオブジェクトを知っていないということです。それは私がデータテンプレートを使用したい理由です。だから、各オブジェクトタイプに対して特定のデータテンプレートを定義することができます。アイテムを選択すると、適切なオブジェクトタイプにマップされ、それをあなたが知っている特定のデータテンプレートでオブジェクトを提示しているコントロールに渡します。 – OneByT

+0

@OneByT OK、まだ必要な場合は、明日の回答を与えることができます。ちょうど私のPCを残して、それは私の携帯電話で書くにはあまりにも多くです –

+0

いいですね!あなたはいたずら! – OneByT

0

性質を反映し、必要に応じてテキストを読み込むことができ、カスタムテキストボックスを作成します。そのカスタムテキストボックスを使用してオブジェクトをバインドします。

例:あなたが作成したこのカスタムテキストボックスを持っていたら

public class PropertyViewerTextBox : TextBox 
{ 
    public object Item 
    { 
     get { return (object)GetValue(ItemProperty); } 
     set { SetValue(ItemProperty, value); } 
    } 

    public PropertyViewerTextBox() 
    { 
     this.TextWrapping = TextWrapping.Wrap; 
     this.AcceptsReturn = true; 
    } 

    // Using a DependencyProperty as the backing store for Item. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty ItemProperty = 
     DependencyProperty.Register("Item", typeof(object), typeof(PropertyViewerTextBox), new PropertyMetadata(OnItemChanged)); 

    public static void OnItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
     var textbox = sender as PropertyViewerTextBox; 
     if (null == e.NewValue) 
     { 
      textbox.Text = string.Empty; 
      return; 
     } 

     var props = e.NewValue.GetType().GetProperties(); 
     var text = new StringBuilder(); 
     foreach(var prop in props) 
     { 
      text.AppendFormat("{0}{1}", prop.Name, Environment.NewLine); 
     } 

     textbox.Text = text.ToString(); 
    } 
} 

、データ・テンプレートを変更し、カスタムテキストボックスを使用して、Itemプロパティにバインドします。オブジェクトを選択すると、すべてのプロパティが表示されます。

<DataTemplate DataType="{x:Type local:Entity}"> 
    <local:PropertyViewerTextBox Item="{Binding A1}" /> 
</DataTemplate> 
+0

このスニペットをありがとうが、私のためにそれを使用する方法は明確ではありません。このコードで新しいクラスを追加しました。それから、私はCodeBehind内に新しいPropertyTextBoxを作成しました。 DataTemplateを編集しましたが、テキストボックスは表示されません。もっと教えていただけますか? – OneByT

+0

それは質問者が欲しいものではありません。私にとっても明らかではなかった。しかし、私の質問の下でコメントを見てください。 –

+0

まあ、私は彼が本当に欲しいものを理解していないと思います。 – loopedcode

関連する問題