2016-08-20 7 views
1

それのまわりで私の脳をラップすることはできませんシンプルObservableCollectionバインディング?私は簡単なのObservableCollectionにリストボックスをバインドしたい

XAML - 私のObservableCollectionオブジェクト

<Window x:Class="ObservableCollection.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:ObservableCollection" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <ListBox Name="Listbox1" ItemsSource="{Binding Path= Test, UpdateSourceTrigger=PropertyChanged}"></ListBox> 
</Grid> 

いくつかの項目を追加し、しようとするリストボックスのバインドリストボックスにデータを表示

namespace ObservableCollection 
{ 
    /// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     ObservableCollection<int> Test = new ObservableCollection<int>(); 
     Listbox1.DataContext = Test; 
     Test.Add(1); 
     Test.Add(123232); 
    } 
} 
} 

コード実行時にデータが表示されません。私はここで間違って何をしていますか?
がうまくいけば、これは物事をクリアし

+1

'{バインディングパス=。}'または '{バインディング} ' –

+0

2つの違いは何ですか?なぜ私はそれをBindingに残すのですか?私はデータを保持するオブジェクトのパスにリンクする必要はありません。ありがとうございます – user3363744

答えて

1

バインディング式にはプロパティパスが含まれます。この場合、パスはDataContextオブジェクトに存在するパブリックプロパティを参照する必要があります。パスを省略すると、バインディングはDataContextオブジェクトになります。あなた自身。

あなたの例では、2つを混同しているようです。プロパティパスを省略するかのようにバインディングを構成しますが、XAMLではプロパティパスを指定します。

次の&hellipのいずれかを実行できます。

があなたの MainWindowクラスにプロパティを追加し、XAMLで持ってパスを保つ:

<Window x:Class="ObservableCollection.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:ObservableCollection" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 

    <Grid> 
     <ListBox Name="Listbox1" ItemsSource="{Binding}"/> 
    </Grid> 
</Window> 

注:

public partial class MainWindow : Window 
{ 
    public ObservableCollection<int> Test { get; set; } 

    public MainWindow() 
    { 
     Test = new ObservableCollection<int>(); 
     InitializeComponent(); 
     DataContext = this; 
     Test.Add(1); 
     Test.Add(123232); 
    } 
} 

かを、あなたは直接DataContextオブジェクトを使用するようにXAMLを変更することができますUpdateSourceTriggerプロパティも設定する必要はありません。目標値は変わることはありませんので、そのようなイベントでソースがどのように更新されるか心配する必要はありません。

+0

ありがとうございます。ItemSource = {"Binding}"を設定していただきありがとうございます。それは私が混乱しているところです。 – user3363744

+0

ああ、私はそれを手に入れます。再度、感謝します – user3363744

1
public MainWindow() 
{ 
    InitializeComponent(); 
    this.DataContext = this; 

    ObservableCollection<int> test = new ObservableCollection<int>(); 
    test.Add(1); 
    test.Add(123232); 
    Test = test; 
} 

public ObservableCollection<int> Test { get; set; } 

ありがとうございます。あなたのdatacontextは、IBindableの消費者が見える場所です。

+0

ここで何をしたのか説明できますか? MainWindowの外でTestを作成する必要があるのはなぜですか?ありがとうございます – user3363744

+0

@ user3363744申し訳ありませんが、私はあなたのための良い説明を入力していたとして中断されました。ピーターがあなたにそれの素敵な要約を与えたようです。 XAMLのマークダウンとC#を理解しているときに、MVVMパターンを調べることをお勧めします。これは、ほとんどのエンタープライズレベルのWPFアプリケーションがどのように構造化されているかを示しています。乾杯! – Tdorno

関連する問題