-1

元の質問はここにありました。 ListView へのバインディング

1 つの問題を修正し、列名が表示されるようになりました。しかし、私はバインディングを理解することはできません。

出力ウィンドウからのエラー:

 System.Windows.Data Error: 4 : Cannot find source for binding with reference 
'ElementName=This'. BindingExpression:Path=LogView.LogEntries; DataItem=null; target 
element is 'ListView' (Name='LoggingListView'); target property is 'ItemsSource' (type     'IEnumerable')

LogFileWindow.XAML からの最新の試行を含む XAML のスニペット。もっと投稿できますが、混乱を抑えようとしています:

   <ListView Name="LoggingListView" ItemsSource="{Binding ElementName=This,  Path=LogView.LogEntries}  ">
                        <ListView.View>
                        <GridView>
                            <GridViewColumn Header="Date" DisplayMemberBinding="{Binding Path=Date}"></GridViewColumn>
                            <GridViewColumn Header="Time" DisplayMemberBinding="{Binding Path=Time}"></GridViewColumn>
                            <GridViewColumn Header="Event" DisplayMemberBinding="{Binding Path=Event}"></GridViewColumn>
                        </GridView>
                        </ListView.View>
                    </ListView>

C# ビューモデル:

public class LogEntryViewModel : INotifyPropertyChanged
{
   public LogEntryViewModel(LogFileEntry le)
    {
        _date = le.Date;
        _time = le.Time;
        _event = le.Event;
    }     
    #region Members
    private string _date;
    public string Date
    {
        get { return _date; }
        set {_date = value;
        RaisePropertyChanged("Date");           
        }
    }

    private string _time;
    public string Time
    {
        get { return _time; }
        set
        {
            _time = value;
            RaisePropertyChanged("Time");

        }
    }

    private string _event;
    public string Event
    {
        get { return _event; }
        set { _event = value;
        RaisePropertyChanged("Event");
        }
    }
    private LogFileEntry _le;
    #endregion

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion

    private void RaisePropertyChanged(string propertyName)
    {
        // take a copy to prevent thread issues
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

public class LogViewModel :ObservableCollection<LogEntryViewModel>
{
       private ObservableCollection<LogEntryViewModel> _LogEntries;
    public ObservableCollection<LogEntryViewModel> LogEntries = new    
  ObservableCollection<LogEntryViewModel>();

}

私がそれを使用しようとしている部分的なクラス宣言と分離コード:

public partial class LogFileWindow : Window
{
    public  LogViewModel LogView = new LogViewModel();

}

4

1 に答える 1

1

Visual Studio のエラーは自明で自明です。ElementName で Binding を実行し、Name="This" でビジュアル要素 (おそらく XAML ビジュアル ツリーで定義されている) を検索しようとしています。そのようなことはありません (明らかに、完全な XAML ツリーを投稿していないため、わかりませんでした)。

ビジュアル要素のプロパティを同じ要素内の別のプロパティにバインドする場合は、RelativeSource Selfを使用します

于 2012-11-02T02:36:20.590 に答える