C # / برنامج الأغذية العالمي: ListView لا بتحديث (ولكن عندما تحقق مع سنوب، كل شيء تبدو على ما يرام)

StackOverflow https://stackoverflow.com/questions/1228058

  •  22-07-2019
  •  | 
  •  

سؤال

لا أحد يعرف لماذا بلادي ListView مع التالية رمز لا يعمل؟ راجعت بها مع سنوب وItemsSource يبدو أن يكون على ما يرام (وعندما أبدأ سنوب، يكون ListView يعرض لي MyViewModel.MyCollection، ولكن عند تصحيح مع Visual Studio أنه يظهر لي شيئا؟)

وشكرا لك!

وPS: MainWindow.xaml.cs لديه DataContext = MainViewModel

    <ListView Grid.Row="1" Margin="38,50,0,168" HorizontalAlignment="Left" Name="listViewSelectDate" Width="105"
              ItemsSource="{Binding Path=MyViewModel.MyCollection}" 
              SelectedItem="{Binding SelectedDate}" IsSynchronizedWithCurrentItem="True">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Date" DisplayMemberBinding="{Binding Path=CalcDate}"/>
            </GridView>
        </ListView.View>
    </ListView>

ووViewModel يبدو مثل هذا:

class MainViewModel : ViewModelBase
{
    public SummaryViewModel MyViewModel
    {
        get { return _myViewModel; }
        set { _myViewModel = value; RaisePropertyChanged("MyViewModel"); }
    }
    public MyDate SelectedDate
    {
        get { return _selectedDate; }
        set { _selectedDate = value; RaisePropertyChanged("SelectedDate"); }
    }
}

و

public class SummaryViewModel : ViewModelBase
{
    public ObservableCollection<MyDate> MyCollection { get; set; }
}

و

public class MyDate
{
    public DateTime CalcDate { get; set; }
}
هل كانت مفيدة؟

المحلول

والذي يضع MyCollection؟ انها لا تقدم إعلام تغيير، وبالتالي فإن الربط لا يعرف أنه قد تم تغييره. التغيير:

private ObservableCollection<MyDate> _myCollection;
public ObservableCollection<MyDate> MyCollection
{
    get { return _myCollection; }
    set
    {
        _myCollection = value;
        OnPropertyChanged("MyCollection");
    }
}

وأو حتى أفضل، وجعلها للقراءة فقط:

private readonly ICollection<MyDate> _myCollection = new ObservableCollection<MyDate>();

public ICollection<MyDate> MyCollection
{
    get { return _myCollection; }
}

نصائح أخرى

وبحث في نافذة ستوديو الناتج البصرية، وسوف تظهر أية أخطاء ربط البيانات التي قد يكون الحصول على التي قد تساعدك في حل هذه القضية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top