2

WPFUIを作成しました。次のコードがに存在しMainWindow.xaml.csます:

namespace AWPFProject
{
    public partial class MainWindow : Window
    {
        private readonly ServiceLogic serviceLogic;

        public MainWindow()
        {
            InitializeComponent();
            serviceLogic = new ServiceLogic ();
        }
    }
}

Servicelogicは私の中心的なクラスです。そこから、データベース管理などを処理するためにメソッドまたはクラスが呼び出されます。

これで、そのServiceLogicクラスには、バインドしたい値が含まれています。たとえば、ユーザーに表示できるコンボボックスがあります。XAMLは次のようになります。

<ListBox Height="100" HorizontalAlignment="Left" Margin="6,44,0,0" 
 Name="listBox_detected" VerticalAlignment="Top" Width="120" 
 ItemsSource="{Binding Path=ServiceLogic.Users}" />

アプリケーションを実行すると、リストは空のままになります。リストにその情報を表示するには、他に何をする必要がありますか?

4

3 に答える 3

7

シナリオでこれを機能させるには、いくつか変更する必要があります。

  1. ウィンドウに正しいDataContextを設定します。

    public MainWindow()
    {   
        InitializeComponent();
        DataContext = new ServiceLogic();
    }
    
  2. にUsersという名前のパブリックプロパティがあることを確認しServiceLogicてください。

    public List<User> Users { get; set; }
    

    実行時にこのリストにアイテムを追加/削除する場合は、を使用することを検討してObservableCollection<T>ください。これにより、変更があった場合は自動的にUIに通知されます。

  3. xamlのバインドロジックを更新して、正しいリストにバインドするようにします。またDisplayMemberPath、オブジェクトが適切に表示されるように、プロパティを設定するか、テンプレートを追加します。

    <ListBox ItemsSource="{Binding Path=Users}" DisplayMemberPath="Name"/>
    

    また

    <ListBox ItemsSource="{Binding Path=Users}">
    <ListBox.ItemTemplate>
         <DataTemplate>
                <...your data template, like grid or stackpanel/>
         </DataTemplate>
    </ListBox.DataTemplate>
    

  4. を使用するときDisplayMemberPathは、Userクラスに正しいプロパティがあることを確認してください。User.csに以下を追加します。

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    } 
    
于 2013-02-20T15:25:44.680 に答える
1

ここでItemsSource="{Binding Path=ServiceLogic.Users}"は、データにパブリックプロパティがあることを示します ServiceLogic

第二に、あなたのデータはDataContext

コンストラクターの変更:

public MainWindow()
{
    InitializeComponent();
    serviceLogic = new ServiceLogic ();
    DataContext = serviceLogic;
}

バインディングをこれに変更します。

<ListBox Height="100" HorizontalAlignment="Left" Margin="6,44,0,0" 
 Name="listBox_detected" VerticalAlignment="Top" Width="120" 
 ItemsSource="{Binding Path=Users}" />

SLはデータ項目であるため、バインディングではServiceLogicを削除しました。そしてPath-はプロパティのパスです。

于 2013-02-20T15:10:14.943 に答える
1

ListBoxの「DisplayMemberPath」プロパティを設定する必要があると思います。

于 2013-02-20T15:27:39.513 に答える