我的应用程序中有一个弹出页面,其中包含一些复选框,我的MainPage中还有一个包含一些stacklayout的ContentPage,我想将stacklayout的IsVisible属性绑定到我的复选框的IsChecked属性(这是在另一页),但我不知道该怎么做,有人可以帮忙吗? 我试过这个,但它不起作用
这是我的弹出页面中的代码:
<StackLayout Orientation="Horizontal" Spacing="60">
<local:Checkbox x:Name="va1Checkbox" Text="VA1"/>
<local:Checkbox x:Name="va2Checkbox" Text="VA2"/>
</StackLayout>
这是我在MainPage中的代码片段:
<StackLayout IsVisible="{Binding Source={x:Reference
va1Checkbox},Path=IsChecked}">
</StackLayout>
提前致谢
答案 0 :(得分:2)
<StackLayout Orientation="Horizontal" Spacing="60">
<local:Checkbox x:Name="va1Checkbox" Text="VA1"/>
<local:Checkbox x:Name="va2Checkbox" Text="VA2"/>
</StackLayout>
我相信您的弹出窗口代表某种设置,您可以根据这些设置控制主页面中的StackLayout
。
如果是这种情况,有两种可能的解决方案。
创建一个单独的类,它对复选框和布局都绑定。你可以将它用于MVVM或不用它。
价值传递:从主页面打开弹出窗口并注册到其关闭事件。当弹出窗口关闭时,您可以使用其复选框的值来启用/禁用布局。
在Popup.xaml.cs中:
创建一个事件动作
public event Action<Popup> OnClose;
我相信你会有办法关闭它。我不知道你正在关闭它,所以我将在这里使用OnBackButtonPressed()
:
protected override bool OnBackButtonPressed()
{
OnClose?.Invoke(this);
return base.OnBackButtonPressed();
}
在MainPage.xaml.cs中:
private void OpenPopup()
{
var popup = new PopupPage();
popup.OnClose += OnPopupClosed;
}
void OnPopupClosed(Popup popup)
{
yourStackLayout.IsVisible = popup.va1Checkbox.Value;
}
<强>更新强>
您可以传递自定义数据类而不是弹出对象:
public class PopupData
{
public bool va1CheckboxValue;
public bool va1CheckboxValue;
// other data which you need to access in other page.
}
然后
public event Action<PopupData> OnClose;
和
protected override bool OnBackButtonPressed()
{
PopupData data = new PopupData() { va1CheckboxValue = va1Checkbox.Value; }
OnClose?.Invoke(data);
return base.OnBackButtonPressed();
}
并在主页中:
void OnPopupClosed(PopupData data)
{
yourStackLayout.IsVisible = data.va1CheckboxValue;
}
希望这有帮助。
答案 1 :(得分:0)
我不太了解XAML和MVVM,但我认为你可以将MainPage的ViewModel传递给Popup ......如果你在Popup中更改MainPage的ViewModel属性,我认为这些更改也会反映到MainPage的绑定控件。
如果你没有使用MVVM(你应该......),我认为你必须将对MainPage中使用的属性的引用传递给Popup ......这样,Popup可以改变MainPage的属性,它的UI可能会改变< / p>