görüntülemek için viewmodel bağlantısı

Benim xaml'ımı viewmodel'imle bağlamak için alamıyorum. Bir resm hakkında veri tutan bir INotifyPropertyChanged sınıfının bir GözlemlenebilirKolumu benim viewModel var. İşte benim Recepie sınıfım:

namespace WP7SQLiteClient.Model
{
    public class MainViewModelItem : INotifyPropertyChanged
    {
        string _title, _subTitle, _imageUriPath;

        string title
        {

            get
            {
                return _title;
            }
            set
            {
                _title = value;
                NotifyPropertyChanged("title");
            }
        }
        string subTitle
        {
            get
            {
                return _subTitle;
            }
            set
            {
                _subTitle = value;
                NotifyPropertyChanged("subTitle");
            }
        }
        string imageUriPath
        {
            get
            {
                return _imageUriPath;
            }
            set
            {
                _imageUriPath = value;
                NotifyPropertyChanged("imageUriPath");
            }
        }

        public MainViewModelItem(string title, string subtitle, string imageuripath)
        {
            this.title = title;
            this.subTitle = subtitle;
            this.imageUriPath = imageuripath;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
}

Ve resminin listesini tutan ViewModel'im:

namespace WP7SQLiteClient.ViewModel
{

        public class PanoramaViewModel : INotifyPropertyChanged
        {
            public ObservableCollection _recepiesList;


            public ObservableCollection recepiesList
            {
                get
                {
                    return _recepiesList;
                }

                set
                {
                    _recepiesList = value;
                    NotifyPropertyChanged("recepiesList");
                }
            }

            public PanoramaViewModel()
            {
                this.recepiesList = new ObservableCollection();

            }

            public bool IsDataLoaded
            {
                get;
                private set;
            }

            public void LoadData()
            {
                this.recepiesList.Add(new MainViewModelItem("Classics", "", ""));
                this.recepiesList.Add(new MainViewModelItem("Perfect Pasta", "", ""));
                this.recepiesList.Add(new MainViewModelItem("Favorites", "", ""));
                this.recepiesList.Add(new MainViewModelItem("Snacks & Antipasti", "", ""));
                this.recepiesList.Add(new MainViewModelItem("Desserts", "", ""));
                this.recepiesList.Add(new MainViewModelItem("3 minutes recipes", "", ""));

                this.IsDataLoaded = true;
            }


            private string _sampleProperty = "Sample Runtime Property Value";
            /// 
/// Sample ViewModel property; this property is used in the view to display its value using a Binding ///
 
            /// 
            public string SampleProperty
            {
                get
                {
                    return _sampleProperty;
                }
                set
                {
                    if (value != _sampleProperty)
                    {
                        _sampleProperty = value;
                        NotifyPropertyChanged("SampleProperty");
                    }
                }
            }




            public event PropertyChangedEventHandler PropertyChanged;

            protected void NotifyPropertyChanged(String info)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(info));
                }
            }
        }

}

MainPage.xaml (projenin kökünde yer alan viewModel, ViewModel klasöründedir ve Model, Model klasöründedir), liste kutumun şu şekilde bildirilmiş halidir:

 

                

Şablon App.xaml'de bulunur ve kesin olarak doğrudur. {Binding title} gibi şeyler kullanır

MainPage.cs'de görünüm modelini kullanarak sayfayı bağlamaya çalışıyorum:

public static PanoramaViewModel viewModel = null;

        public static PanoramaViewModel ViewModel
        {
            get
            {
               //Delay creation of the view model until necessary
                if (viewModel == null)
                    viewModel = new PanoramaViewModel();

                return viewModel;
            }
        } 
public MainPage()
        {

            InitializeComponent();

            ViewModel.LoadData();
            DataContext = ViewModel;

        }

Ama işe yaramıyor ya da hata ayıklayıcı bir hata yaratıyor. Viewmodel'i xaml ile doğru şekilde nasıl bağlarım?

UPDATE my template looks like this :

 <!-- for recent recepies-->

            

                
                    

                    
                        

                            

                                    
                                

                            
                        
                    
                
                    
                    
                        
                    
                

            
        

2 GÜNCELLEME

liste kutusu kodumu değiştirdim:

             

Hiçbir şablon ile [proje_adı] .Model.MainViewModelItem listesini alırım, bu yüzden şablonla ilgili bir sorun olduğunu düşünüyorum .. Neyi yanlış yapıyorum?

1

2 cevap

Veri için size ListBox bağlamanız gerekir. Yani, bu senin için çalışmalı.


2
katma
işe yaramazsa ... I: 'System.IO.FileNotFoundException' türünde bir ilk şans istisnası mscorlib.dll System.Windows.Data içinde oluştu. Hata: BindingExpression yolu hatası: 'title' özelliği 'WP7SQLiteClient.Model'de bulunamadı. MainViewModelItem '' WP7SQLiteClient.Model.MainViewModelItem '(HashCode = 65782377)
katma yazar Alex, kaynak
yani subTitle dizesi, bağlayıcı olmadığım için görünmez, statik bir dizgi veririm
katma yazar Alex, kaynak
ah halk hakkında haklısın, ama hala hiçbir şey göstermiyorum
katma yazar Alex, kaynak
hata yok, ancak liste kutusundaki öğeleri göstermiyor. çıkışta hata yok
katma yazar Alex, kaynak
şablon kodunu ekledim
katma yazar Alex, kaynak
UPDATE2 ekledim, lütfen bak
katma yazar Alex, kaynak
Sorun şablon oldu tnx!
katma yazar Alex, kaynak
Görüntüleme modelinizin özellikleri herkese açık değildir! Onları halka açın ve mutlu olun :)
katma yazar Sergei B., kaynak
aynı hata? ya da sadece göstermiyor?
katma yazar Sergei B., kaynak
Snoop'u alın ve ListBox'ta herhangi bir ListBoxItem öğesi olup olmadığını kontrol edin. Ayrıca şablonunuzu gösterin ve kod snippet'lerini genel özelliklerle güncelleyin. Çünkü çıktıda hiçbir bağlanma hatasınız yoksa, sorunun ne olduğunu söylemek zor.
katma yazar Sergei B., kaynak

Bir projede MEF kullanıyoruz ve görünüm modellerini aşağıdaki kodla birlikte View.xaml.cs dosyasına bağlarız:

[Import]
public ConnectionStringSetupViewModel ViewModel
{
    get { return DataContext as ConnectionStringSetupViewModel; }
    set { DataContext = value; }
}

Bu, kataloglar oluşturulduğunda içe aktarmanın sağlanmasına izin verir. MEF'yi kullanmıyorsanız, içe aktarmadan aynı kodu kullanabilirsiniz, ancak görünümünüz oluşturulduğunda, görünümünüzün yeni bir örneğini ona atamanız gerekir.

0
katma
Viewmodel sınıfımın yeni bir örneğini nasıl atayabilirim? neyi kastettiğinden emin değilim
katma yazar Alex, kaynak
UPDATE2 ekledim, lütfen bak
katma yazar Alex, kaynak
PanaromaView p = yeni PanaromaView (); p.ViewModel = yeni PanaromaViewModel ();
katma yazar Dirk Dastardly, kaynak
Şablon atanmadan tam olarak alacağınız şey budur. Ben bir kez ItemsSource ve ItemsTemplate birleştirmek gerektiğini düşündüğünüz yerde olması gerektiğini düşünüyorum.
katma yazar Dirk Dastardly, kaynak
Windows
Windows
729 Katılımcıların

Windows ile ilgili tüm sorunların çözümüne yanıt arandığı ve paylaşımların yapıldığı bir gruptur. @SerCiTV @Tekpay @Apktanitim kanal/grupların uzantısıdır. https://t.me/joinchat/H1pwvUwqv4etCBtv9Oi_qQ