2

同様の質問がたくさんあり、私はそれらの質問からいくつかの答えを試しましたが、これまでのところ何も役に立ちません。エラーメッセージが実際に何を意味するのかわかりません。エラーメッセージは次のとおりです。

System.Windows.Data Error: 40 : BindingExpression path error: 'CategoryModel' 
property not found on 'object' ''String' (HashCode=-57655201)'.
BindingExpression:Path=CategoryModel.CategoryList; DataItem='String'
(HashCode=-57655201); target element is 'TextBlock' (Name=''); target property is
'Text' (type 'String')

CategoryListには、いっぱいのカテゴリの文字列リストが含まれています(デバッグからチェック)。私のxamlは以下です、

<ListView x:Name="categoryListView" HorizontalAlignment="Left" Width="56" Height="156" 
              ItemsSource="{Binding Path=CategoryModel.CategoryList}" 
              DisplayMemberPath="CategoryModel.CategoryList" 
              SelectedValue="{Binding Path=CategoryModel.SelectedCategory}"
              VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5">
</ListView>

xamlデザインは問題ないように見え、アプリケーションは正常に実行されますが、何も入力されません。categoryListは、初期化時に入力されることになっています。実際には入力されていますが、listViewには何も表示されません。

編集:

CategoryModel;

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RecorderApp.Model
{
public class CategoryModel : INotifyPropertyChanged
{
    private String _selectedCategory;
    private String _recordTitle;
    private String _systemInfoLabel;


    private ObservableCollection<String> _categoryList;

    public ObservableCollection<String> CategoryList
    {
        get { return _categoryList; }

        set
        {
            if (_categoryList != value)
            {
                _categoryList = value;
                OnPropertyChanged("CategoryList");
            }
        }
    }

    public String SystemInfoLabel
    {
        get { return _systemInfoLabel; }

        set
        {
            if (_systemInfoLabel != value)
            {
                _systemInfoLabel = value;
                OnPropertyChanged("SystemInfoLabel");
            }
        }
    }

    public String SelectedCategory
    {
        get { return _selectedCategory; }

        set
        {
            if (_selectedCategory != value)
            {
                _selectedCategory = value;
                OnPropertyChanged("SelectedCategory");
            }
        }
    }

    public string RecordTitle
    {
        get { return _recordTitle; }
        set
        {
            _recordTitle = value;
            OnPropertyChanged("RecordTitle");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
}
4

2 に答える 2

11

バインディングDisplayMemberPathがエラーの原因になっています。この場合、必要ないため、完全に削除する必要があります。

を使用するには、DisplayMemberPathのようなプロパティを参照できる必要があります。ListView.ItemsSource[X].SomePropertySomePropertyDisplayMemberPath

ItemsSourceがでありList<String>、とString呼ばれるプロパティが含まれていないため、このエラーが発生しますCategoryModel

正確なバインディングエラーを説明するには、次のようにします。

System.Windows.Dataエラー:40:BindingExpressionパスエラー:'CategoryModel'プロパティが'オブジェクト'''文字列'(HashCode = -57655201)'に見つかりません。BindingExpression:Path = CategoryModel.CategoryList; DataItem ='String'(HashCode = -57655201); ターゲット要素は'TextBlock'(Name ='');です。ターゲットプロパティは「テキスト」(タイプ「文字列」)です

  • CategoryModelこの行は、オブジェクトのプロパティが見つからないことを意味しますString

    BindingExpressionパスエラー:'CategoryModel'プロパティが'オブジェクト'''文字列'(HashCode = -57655201)'に見つかりません

  • この行にはPath、エラーをスローしているバインディング式のプロパティが含まれています

    BindingExpression:Path = CategoryModel.CategoryList;

  • この行は、エラーをスローしているバインディングのSourceオブジェクト(通常はDataContext)を示しています。

    DataItem ='String'(HashCode = -57655201);

  • そして、この行は、プロパティのバインドに失敗していることを意味します(これは、プロパティTextにバインドされた単一のを作成するためのショートカット方法です)TextBoxDisplayMemberPathItemTemplateTextBlockTextDisplayMemberPath

    ターゲット要素は'TextBlock'(Name ='');です。ターゲットプロパティは「テキスト」(タイプ「文字列」)です

つまり、すべてをまとめると、バインドしようとしていることを示していますがTextBox.Text{Binding Path=CategoryModel.CategoryList}背後DataContextTextBoxはタイプがあり、というプロパティはStringありStringません。CategoryModel

于 2013-01-23T14:25:11.260 に答える
0

以下の静的バインディングも役立つ場合があります。

<Window.Resources>
  <local:CategoryModel x:Key="objCategory" />
</Window.Resources>
<Grid>
  <ListView x:Name="categoryListView" 
            HorizontalAlignment="Left" 
            Width="56" Height="156" 
            ItemsSource="{Binding Source={StaticResource objCategory}, Path=CategoryList}"        
            VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" />
</Grid>
于 2013-01-23T15:02:47.513 に答える