我正在学习并使用“Windows Template Studio”创建一个主 - 详细信息项目。
但我不知道怎么样? 我已将示例代码上传到GitHub。 https://github.com/hupo376787/App2
任何人都可以更改示例代码,非常感谢!
答案 0 :(得分:2)
为了在Company
属性发生变化时自动更新列表中的公司字段,您需要进行以下更改 -
您需要在 MasterDetailPage 中将绑定添加到Mode=OneWay
由于x:Bind
中的默认模式为OneTime
,这意味着一次
该值已设置,永远不会更新。
<TextBlock Grid.Row="1"
Text="{x:Bind Company, Mode=OneWay}"
Style="{StaticResource ListSubTitleStyle}" />
您的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));
}
}
在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;
现在运行你的应用程序,它应该工作得很好。 :)
答案 1 :(得分:0)
绑定到主视图的Order
项需要通知视图属性更改,因此应实现INotifyPropertyChanged