【问题标题】:Manpulating DataContext in Windows Phone在 Windows Phone 中操作 DataContext
【发布时间】:2014-08-24 14:09:38
【问题描述】:

我有一个非常小的应用程序,其中有一个笑话列表,一切正常,但每次我想在 TextBlock 中显示信息时都必须重新设置 DataContext。 SAME页面的TextBlock发生变化,我只想更改笑话ID以获得新的笑话。

 private IList<Jokes> data;
    Array variable;
    private int count;

    // Constructor
   // ObservableCollection<Jokes> = new ObservableCollectoin<Jokes>;
    public MainPage()
    {
        InitializeComponent();
        JokeRepository countryRepository = new XmlJokeRepository();
        data = countryRepository.GetCountryList().ToList<Jokes>();
        DataContext = countryRepository.GetCountryById(3);
             }
 private void nextIconClick(object sender, EventArgs e)
    {
       Random rand = new Random();
        int holder = rand.Next(1, count);
        DataContext = data.FirstOrDefault(c => c.ID == holder);
               }

在我的 XAML 中,我的 {Binding Description} 属性工作正常,但我真的觉得这是多余的和无用的。尽管我仍然使用相同的变量/页面,但是否有另一种方法可以解决这个问题而不必每次都重置 DataContext?

【问题讨论】:

    标签: xaml windows-phone


    【解决方案1】:

    您可以创建一个属性,例如CurrentJoke,然后将您的DataContext 设置为该属性。

    然后您可以更新该属性并触发NotifyPropertyChanged 事件,这将使用您的CurrentJoke 属性中的最新数据刷新TextBox

    这是一个(未经测试但非常接近)代码示例:

    public class Page : INotifyPropertyChanged
    {
        private string currentJoke;
        public event PropertyChangedEventHandler PropertyChanged;
    
        public string CurrentJoke
        {
            get
            {
                return currentJoke;
            }
            set
            {
                if ( currentJoke == value )
                    return;
    
                currentJoke = value;
                OnPropertyChanged( new PropertyChangedEventArgs( "CurrentJoke" ) );
            }
        }
    
        protected virtual void OnPropertyChanged( PropertyChangedEventArgs e )
        {
            if ( this.PropertyChanged != null )
                this.PropertyChanged( this, e );
        }
    }
    

    在您的 XAML 中,设置使用与 Description 相同的 {Binding CurrentJoke} 语法。如果你有一个正确的字段数据绑定,DataContext 可能已经为整个页面正确设置了。

    【讨论】:

    • 如何将 DataContext 设置为那个?
    • 非常感谢,去试试
    • 不客气。如果您还没有阅读过 MVVM 模式,可能值得一读。我并不总是在我的应用程序中使用它,但它可以帮助您了解如何有效地使用数据绑定。
    • 是的,正在阅读 Jesse Liberty 的教程,但对于初学者来说,TBH 变得非常复杂,并且并不真正了解如何使用该 Messenger 等
    • 同意,即使当你想清楚它时,它有时也有点矫枉过正。祝你好运!
    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多