■73242 / inTopicNo.1) |
wpf で動的に他のクラスのlistBoxのデータをこうしん |
□投稿者/ pyon (1回)-(2014/09/01(Mon) 10:43:09)
|
分類:[.NET 全般]
お世話になります。
WPF、C#、Windowsアプリです。MainWindowにPage1を追加しPage1は、MainWindowの端にタブを配置して マウスが乗った時、ページを表示するようになっています。
ここを参考にしました。http://codezine.jp/article/detail/2097?p=2(参考と言うよりパクリです。)
組み込みは、問題ないのですが、Page1にリストボックスを配置してMainWindowのcomboBoxで選択が変更 になる度にこのListBoxの内容を動的に更新したく下記のようにコードを追加しました。 しかし、リスト内容は表示しません。
class Menusのdatは、更新されるのでプログラムの流れはうまくいっているように見えます。 しかし表示してきません。
どうしたらいいでしょうか?教えてください。
ちなみに、 public Menus() { this.Add("Penguin"); this.Add("Owl"); this.Add("Falcon"); } 初期化を上記のみとした場合、表示してきます。でも、その後に内容を変更しようとしても変わりません。
長文になりますが、コードです。 Page1.xaml <Page x:Class="EntryTable2.Page1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Page1" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:src="clr-namespace:EntryTable2" d:DesignHeight="226" d:DesignWidth="145" Loaded="Page_Loaded" MouseEnter="Page_MouseEnter"> <Page.Resources> <ObjectDataProvider x:Key="myMenus" ObjectType="{x:Type src:Menus}"/> </Page.Resources>
<ListView x:Name="listBox1" SelectionChanged="listBox1_SelectionChanged" ItemsSource="{Binding Source={StaticResource myMenus}}" > </ListView> </Page>
Page1.xaml.cs public partial class Page1 : Page { :
private void Page_MouseEnter(object sender, MouseEventArgs e) { Menus myMenu = new Menus(); myMenu.MakeMenu(); }
private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) { } }
public class Menus : System.Collections.ObjectModel.ObservableCollection<string/*MenuItem*/> { public string userID = ""; public Dictionary<string, string> dat;
public Menus() { this.Add("Penguin"); this.Add("Owl"); this.Add("Falcon");
this.Clear();
if (dat == null) return;
if (dat.Count > 0) { this.Clear();
int id = 0; foreach (string txt in dat.Keys) { System.Windows.Controls.MenuItem item = new System.Windows.Controls.MenuItem(); //item.Header = txt; // item.ToolTip = GetCheckText(dat[txt]); //item.Background = System.Windows.Media.Brushes.LightGreen; //(Color.FromArgb(255, 128, 255); //item.Name = "Id_" + id.ToString(); // item.Click += textBlock3_Clicked;
this.Add(txt);
++id; }
// 試しにここに書いた内容も、リストに反映しない this.Add("Penguin"); this.Add("Owl"); this.Add("Falcon"); }
}
public void MakeMenu() { comboBoxで変更したときに表示、基本的に上と同じ }
MainWindow.xaml.cs private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (_comboBoxPopup == null || !_comboBoxPopup.IsOpen) return;
Menus myMenu = new Menus(); myMenu.userID = comboBox101.SelectedValue.ToString();
myMenu.dat = menuData[myMenu.userID]; } 長文で失礼しました。
|
|