C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

C#+WPF,MVVMでのリストへの動的データバインド方法? /ディー (18/04/16(Mon) 03:14) #87140
Re[1]: C#+WPF,MVVMでのリストへの動的データバインド方法? /ディー (18/04/16(Mon) 03:22) #87141
  └ Re[2]: C#+WPF,MVVMでのリストへの動的データバインド方法? /Hongliang (18/04/16(Mon) 09:22) #87143
    └ Re[3]: C#+WPF,MVVMでのリストへの動的データバインド方法? /ディー (18/04/17(Tue) 01:14) #87153
      └New Re[4]: C#+WPF,MVVMでのリストへの動的データバインド方法? /ディー (18/04/22(Sun) 03:41) #87196 解決済み


親記事 / ▼[ 87141 ]
■87140 / 親階層)  C#+WPF,MVVMでのリストへの動的データバインド方法?
□投稿者/ ディー (1回)-(2018/04/16(Mon) 03:14:09)

分類:[.NET 全般] 

遅まきながら数日前にWPFを勉強しだしました。
LISTBOXへデータバインドした際に、動的にアイテムソースを違いリストに変更する手段が良くわかりません。

@ビュー上には、以下が設置してあります
 リストボックス
 テキストボックス
 名前検索ボタン
 住所検索ボタン

A検索ボタンを押下しテキストボックスに入力した値で、名前検索は「人名テーブル」
住所検索は「住所録テーブル」からデータ取得します。

B検索後に
  名前検索は、[苗字][名前][年齢][性別]
  住所検索は、[苗字][名前][都道府県][住所]
上記を取得し、リストボックスに表示したいです。





現状初期表示時に[苗字][名前][年齢][性別]を表示してあるのですが、
名前検索時には同じ型なので正常に動作しますが、
住所検索時にはアイテムソースの型が違うためエラーが発生してしまいます。
どのように、バインドすればよいのでしょうか?
(ソースはだいぶ削っています)
****************************ソース***************************

Window1.xaml
<Window x:Class="WpfApplication1.Window1" 〜〜 Title="Window1" >
<Grid>
<ListBox Name="listBox1" ItemsSource="{Binding ListItem}" />
<Textbox Name="txt1" />
<Button Name="button1" Click="button1_Click">名前検索</Button>
<Button Name="button1" Click="button2_Click">住所検索</Button>
</Grid>
</Window>


Window1.cs
class Window1 : INotifyPropertyChanged
{

public button1_Click()
{
ListItem = {名前検索のロジック。ObservableCollection<Name>で帰ってくる。}
}
public button2_Click()
{
ListItem = {名前検索のロジック。ObservableCollection<Address>で帰ってくる。}
}

}
**************************************************************


[ □ Tree ] 返信 編集キー/

▲[ 87140 ] / ▼[ 87143 ]
■87141 / 1階層)  Re[1]: C#+WPF,MVVMでのリストへの動的データバインド方法?
□投稿者/ ディー (2回)-(2018/04/16(Mon) 03:22:23)
読み直しながら意味わからないなーと思いつつ(ぉぃ


つまり、1つのリストボックスを使いまわして
条件によって全く違う要素を持ったデータを表示したいということです。

[ 親 87140 / □ Tree ] 返信 編集キー/

▲[ 87141 ] / ▼[ 87153 ]
■87143 / 2階層)  Re[2]: C#+WPF,MVVMでのリストへの動的データバインド方法?
□投稿者/ Hongliang (634回)-(2018/04/16(Mon) 09:22:34)
2018/04/16(Mon) 09:23:15 編集(投稿者)
こういうことでしょうかね?

<ListBox ...>
  <ListBox.Resources>
    <DataTemplate DataType="{x:Type local:Name}">
      <TextBlock Text="{Binding Surname}"/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type local:Address}">
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Prefecture}"/>
        <TextBlock Text="{Binding Municipality}"/>
      </StackPanel>
    </DataTemplate>
  </ListBox.Resources>
</ListBox>

ListBox.ItemTemplateが設定されておらず、
アイテムの型で定義されているDataTemplateがリソースに見つかった場合、
そのDataTemplateを使用する、というのを利用しています。

[ 親 87140 / □ Tree ] 返信 編集キー/

▲[ 87143 ] / ▼[ 87196 ]
■87153 / 3階層)  Re[3]: C#+WPF,MVVMでのリストへの動的データバインド方法?
□投稿者/ ディー (4回)-(2018/04/17(Tue) 01:14:48)
スミマセン。
自己解決しました。


説明方法も悪かったようで申し訳ないです。
1つのリストボックスに[苗字][名前]を表示し、裏で[年齢][性別]もしくは[都道府県][住所]を交互(?)に持ちたかったのです。

[年齢][性別]は人名テーブル、[都道府県][住所]住所テーブルから持ってきてそのままLISTBOXに使おうとしてたのですが、
取得データの型等が違うためエラーが出て困っていました。

全カラムを持ったObservableCollection<ALL>型を作って
そこに名前検索の際にはObservableCollection<Name>から
住所検索のロジック。ObservableCollection<Address>から必用部位のみ連結することにしました。

基礎的な部分でこんがらがっていたようです(笑




追加で申し訳ないのですがDataTemplateの
<TextBlock Text="{Binding Prefecture}"/>
の項目や項目数を動的に変化させること等は可能でしょうか?

(例)名前検索時:[苗字][名前][年齢][性別]
   住所検索時:[苗字][都道府県]
というようにボタン押下時に表示内容を変化させられますか?




[ 親 87140 / □ Tree ] 返信 編集キー/

▲[ 87153 ] / 返信無し
■87196 / 4階層)  Re[4]: C#+WPF,MVVMでのリストへの動的データバインド方法?
□投稿者/ ディー (9回)-(2018/04/22(Sun) 03:41:35)
終了します。
どうもありがとうございました
解決済み
[ 親 87140 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -