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

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

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

Re[3]: WPF ListBoxのItemSourceへバインド


(過去ログ 61 を表示中)

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

■35069 / inTopicNo.1)  WPF ListBoxのItemSourceへバインド
  
□投稿者/ Z (1回)-(2009/04/19(Sun) 14:09:15)

分類:[C#] 

お世話になっています。今日はWPFの勉強をしているのですが、つまづいてしまいました。
ListBoxのItemSourceにクラスのプロパティをバインドして表示するだけなのですが…
起動直後は上手く動きます。ただし、「更新」ボタンを押下するとプロパティ内容が変化し、
それに応じてListBoxの表示も変わるようにやってみたのですが…
プロパティ自体は変わります。ただし、ListBoxの表示が変わりません。
ご教授して頂けないでしょうか。よろしくお願いします。

Window1.xaml
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <ListBox Margin="42,12,34,75" Name="listBox1" ItemsSource="{Binding RndItem}" />
        <Button Height="28" Margin="92,0,84,8" Name="button1" VerticalAlignment="Bottom" Click="button1_Click">更新</Button>
        <TextBlock Height="26" Margin="42,0,32,43" Name="textBlock1" VerticalAlignment="Bottom" Text="{Binding Count}" />
    </Grid>
</Window>

Window1.xaml.cs
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        this.DataContext = new Class1();
    }
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        ((Class1)this.DataContext).NewRndItem();
    }
}

Class1.cs
class Class1 : INotifyPropertyChanged
{
    Random rnd = new Random();
    List<int> lst = new List<int>();
    public List<int> RndItem
    {
        get
        {
            lst.Clear();
            int count = rnd.Next(10) + 1;
            for (int i = 0; i < count; i++)
            {
                lst.Add(i);
            }
            return lst;
        }
    }
    public int Count
    {
        get
        {
            return lst.Count;
        }
    }
    public void NewRndItem()
    {
        OnPropertyChanged("RndItem");
        OnPropertyChanged("Count");
    }
    public event PropertyChangedEventHandler PropertyChanged;
    void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

引用返信 編集キー/
■35070 / inTopicNo.2)  Re[1]: WPF ListBoxのItemSourceへバインド
□投稿者/ Z (2回)-(2009/04/19(Sun) 14:40:01)
申し訳ありません。自己レスです。

ListではなくObservableCollectionを使用することで解決しました。

この方法でOKでしょうか?


No35069 (Z さん) に返信
> お世話になっています。今日はWPFの勉強をしているのですが、つまづいてしまいました。
> ListBoxのItemSourceにクラスのプロパティをバインドして表示するだけなのですが…
> 起動直後は上手く動きます。ただし、「更新」ボタンを押下するとプロパティ内容が変化し、
> それに応じてListBoxの表示も変わるようにやってみたのですが…
> プロパティ自体は変わります。ただし、ListBoxの表示が変わりません。
> ご教授して頂けないでしょうか。よろしくお願いします。
>
> Window1.xaml
> <Window x:Class="WpfApplication1.Window1"
> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
> Title="Window1" Height="300" Width="300">
> <Grid>
> <ListBox Margin="42,12,34,75" Name="listBox1" ItemsSource="{Binding RndItem}" />
> <Button Height="28" Margin="92,0,84,8" Name="button1" VerticalAlignment="Bottom" Click="button1_Click">更新</Button>
> <TextBlock Height="26" Margin="42,0,32,43" Name="textBlock1" VerticalAlignment="Bottom" Text="{Binding Count}" />
> </Grid>
> </Window>
>
> Window1.xaml.cs
> public partial class Window1 : Window
> {
> public Window1()
> {
> InitializeComponent();
> this.DataContext = new Class1();
> }
> private void button1_Click(object sender, RoutedEventArgs e)
> {
> ((Class1)this.DataContext).NewRndItem();
> }
> }
>
> Class1.cs
> class Class1 : INotifyPropertyChanged
> {
> Random rnd = new Random();
> List<int> lst = new List<int>();
> public List<int> RndItem
> {
> get
> {
> lst.Clear();
> int count = rnd.Next(10) + 1;
> for (int i = 0; i < count; i++)
> {
> lst.Add(i);
> }
> return lst;
> }
> }
> public int Count
> {
> get
> {
> return lst.Count;
> }
> }
> public void NewRndItem()
> {
> OnPropertyChanged("RndItem");
> OnPropertyChanged("Count");
> }
> public event PropertyChangedEventHandler PropertyChanged;
> void OnPropertyChanged(string propertyName)
> {
> PropertyChangedEventHandler handler = this.PropertyChanged;
> if (handler != null)
> handler(this, new PropertyChangedEventArgs(propertyName));
> }
> }
引用返信 編集キー/
■35073 / inTopicNo.3)  Re[2]: WPF ListBoxのItemSourceへバインド
□投稿者/ 倉田 有大 (569回)-(2009/04/19(Sun) 16:47:57)
お、昔私がした質問だ。
OKです。多分。
INotifyCollectionChanged を実装してもいと思います。
引用返信 編集キー/
■35074 / inTopicNo.4)  Re[3]: WPF ListBoxのItemSourceへバインド
□投稿者/ Z (3回)-(2009/04/19(Sun) 16:50:35)
ありがとうございます。

> お、昔私がした質問だ。

過去にあった質問だったのですが…
検索が甘かったようです。
申し訳ありません。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -