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

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

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

C#+WPF,MVVMでのリストへの動的データバインド方法?

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■87140 / inTopicNo.1)  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>で帰ってくる。}
}

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


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


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

引用返信 編集キー/
■87143 / inTopicNo.3)  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を使用する、というのを利用しています。

引用返信 編集キー/
■87153 / inTopicNo.4)  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}"/>
の項目や項目数を動的に変化させること等は可能でしょうか?

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




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

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ