【发布时间】:2018-07-30 21:10:27
【问题描述】:
我目前正在为我正在开发的应用程序构建 UI,但我遇到了一些绑定问题。
情景:
我有一个枢轴控件,每个枢轴元素都由一个额外的框架/页面组成。 现在我在第一个 PivotItem 上有一个 TextBlock。我将它绑定到一个“字符串”并使用一个按钮在按钮的两个可能内容之间切换。
当按钮在同一个页面/框架上时,它就像一个魅力。但是,当我在 MainPage 上实现一个按钮并为 MainPage 实现相同的 Viewmodel 时,它就不起作用了。它只会更改 MainPage 上的字符串内容。
是否可以为每个页面/框架实施更改?
完成后,我有一个页面,我可以在其中使用串行端口收集数据。 我将数据保存到一个列表中,我希望能够从 2 个不同的页面/框架中使用这个列表。 考虑上面的场景,它可能会为我有按钮获取数据的页面收集数据,但它可能不会在其他页面上显示任何内容。 我怎样才能按照我想要的方式构建它?
这是一个简短的例子:
Mainpage.xaml
<StackPanel>
<Button Height="50" Width="200" Content="Change" FontSize="30" FontWeight="Bold" Margin="50 50 0 0" Click="{x:Bind MainViewModel.Change}"/>
<Pivot x:Name="MainPivot" Margin="50 50">
<PivotItem Header="Page 1">
<Frame x:Name="Page1" />
</PivotItem>
</Pivot>
</StackPanel>
Mainpage.xaml.cs
public MainPage()
{
this.InitializeComponent();
Page1.Navigate(typeof(Page1));
ViewModel = new MainViewModel();
}
public MainViewModel ViewModel { get; private set; }
Page1.xaml
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="{x:Bind Path=ViewModel.StringModel.String1, Mode=TwoWay}" FontSize="50" FontWeight="Bold" />
<Button Content="Change" FontSize="30" FontWeight="Bold" Click="{x:Bind ViewModel.Change}"/>
</StackPanel>
Page1.xaml.cs
public Page1()
{
this.InitializeComponent();
ViewModel = new MainViewModel();
}
public MainViewModel ViewModel { get; private set; }
MainViewModel.cs
private StringModel _stringModel = new StringModel();
public StringModel StringModel
{
get => _stringModel;
set
{
if (_stringModel != value)
{
_stringModel = value;
OnPropertyChanged();
}
}
}
public void Change()
{
if (StringModel.String1 == "Text1")
{
StringModel.String1 = "Text2";
}
else
{
StringModel.String1 = "Text1";
}
}
StringModel.cs
private string _string1 = "XXX";
public string String1
{
get => _string1;
set
{
_string1 = value;
OnPropertyChanged();
}
}
【问题讨论】:
标签: c# xaml data-binding uwp win-universal-app