0

これは非常に単純な解決策のはずですが、インターネットで検索すると、バインディングを行う方法が複数あるようで、実際には機能していないようです。

ボタン、テキストボックス、リストボックスを備えた単純なアプリケーションを作成しました。ユーザーがテキスト ボックスにテキストを追加し、[追加] をクリックすると、そのテキストがリスト ボックスに表示されます。[追加] ボタンをクリックすると、名前がテキスト ボックス内のテキストで、姓が「Jones」の Person が作成されることに注意してください。これは、バインディングを実際に機能させる方法を理解するためのものです。私は ObservableCollection を持っていますが、クラス自体内のオブジェクトにリソースを配置する方法さえ理解できないようです。これは可能ですか?バインディングを持つために別のクラスを作成する必要がありますか?

ここに完全なXMALがあります

<UserControl x:Class="simpleBinding.MainPage"
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:z="clr-namespace:simpleBinding"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<Canvas x:Name="LayoutRoot" Background="White">
    <Button Name="_b"  Content="Add" Height="23" HorizontalAlignment="Left"  VerticalAlignment="Top" Width="58" Canvas.Left="90" Canvas.Top="5" Click="OnAdd" />
    <TextBox Name="_tb" Canvas.Left="12" Canvas.Top="4" Height="24" Width="72"></TextBox>
    <ListBox Name="_list" Canvas.Left="18" Canvas.Top="41" Height="98" Width="190" />
</Canvas>

ここに完全なコードビハインドがあります

namespace simpleBinding
{
    public partial class MainPage : UserControl
    {
        public ObservableCollection<Person> PersonList = new ObservableCollection<Person>    ();
        public MainPage()
        {
            InitializeComponent();
        }

        private void OnAdd(object sender, RoutedEventArgs e)
        {
            PersonList.Add(new Person(_tb.Text, "Jones"));
        }
    }

    public class Person
    {
        public string FirstName {private set; get;}
        public string LastName {private set; get; }

        public Person(string fName, string lName)
    {
            FirstName = fName;
        LastName = lName;
    }
    }
}

助けてくれてありがとう、クリス

4

2 に答える 2

2

Ravuthasamy と aqwert のコメントを説明します。DataContext最初に設定する必要があります。MVVMthisがどのように機能するかを設定DataContextまたは読み取ることができます(これは優れた Silvelight バインディング パターンです)。

c#

public MainPage()
{
    InitializeComponent();
    DataContext = this;
}

クラスのプロパティを要素にバインドできるようになったら:

Xaml

<ListBox
    ItemsSource="{Binding PersonList}"
    Canvas.Left="18"
    Canvas.Top="41"
    Height="98"
    Width="190" />
于 2013-07-10T07:07:41.733 に答える