使用UWP主 - 细节更改详细信息项

时间:2017-09-06 15:17:29

标签: uwp uwp-xaml

我正在学习并使用“Windows Template Studio”创建一个主 - 详细信息项目。

现在我想更改详细信息,并希望更改主数据中显示的更改。 如下 enter image description here

但我不知道怎么样? 我已将示例代码上传到GitHub。 https://github.com/hupo376787/App2

任何人都可以更改示例代码,非常感谢!

2 个答案:

答案 0 :(得分:2)

为了在Company属性发生变化时自动更新列表中的公司字段,您需要进行以下更改 -

  1. 您需要在 MasterDetailPage 中将绑定添加到Mode=OneWay 由于x:Bind中的默认模式为OneTime,这意味着一次 该值已设置,永远不会更新。

    <TextBlock Grid.Row="1"
               Text="{x:Bind Company, Mode=OneWay}"
               Style="{StaticResource ListSubTitleStyle}" />
    
  2. 您的Order课程需要实施INotifyPropertyChanged 否则,改变将永远不会进入用户界面。

    public class Order: INotifyPropertyChanged
    {
        private string _company;
    
        public string Company
        {
            get => _company;
            set
            {
                if (_company == value) return;
    
                _company = value;
                OnPropertyChanged();
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    
  3. TextBox中,您需要 {绑定'UpdateSourceTrigger=PropertyChanged因为你想要 每个按键触发更新。不幸的是,这不是 x:Bind支持,因此您必须更改回来使用 传统的Binding。注意一旦你改变它,你也会 需要提供UserControl个名称,比如说Self,以便您可以使用 ElementName找到相同的绑定表达式(即 MasterMenuItem.Company)。

    <UserControl x:Class="App2.Views.MasterDetailDetailControl"
                 ...
                 x:Name="Self">
    
    <TextBox Text="{Binding MasterMenuItem.Company, ElementName=Self, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
    

    /&GT;

  4. 现在运行你的应用程序,它应该工作得很好。 :)

答案 1 :(得分:0)

绑定到主视图的Order项需要通知视图属性更改,因此应实现INotifyPropertyChanged

Documentation