C# 在Xamarin VisualStateManager中将状态传递给子视图
我有一些嵌套的ContentView。我们可以这样说:C# 在Xamarin VisualStateManager中将状态传递给子视图,c#,.net,xamarin,xamarin.forms,C#,.net,Xamarin,Xamarin.forms,我有一些嵌套的ContentView。我们可以这样说: MasterView - TwoRowView --- TitleView ----- TitleLabel ----- DateLabel ----- Icon --- ContentView ----- TwoRowView ------- DetailTitleView ------- DetailBodyView - TwoRowView --- [...] 在某个时刻,在TwoRowViewcode behind中,我正
MasterView
- TwoRowView
--- TitleView
----- TitleLabel
----- DateLabel
----- Icon
--- ContentView
----- TwoRowView
------- DetailTitleView
------- DetailBodyView
- TwoRowView
--- [...]
在某个时刻,在TwoRowView
code behind中,我正在通过VisualStateManager.gostate([TitleView],[stateName])
设置TitleView
状态(这是pseudcode,与这些不一样)
在现实中,我只是不想把你和不相关的代码和变量名称混淆;))对于某些状态,让我们把它命名为“扩展”
但从那一点开始,我想做的是将标题标签的状态设置为这个状态
当在父视图中设置时,将VisualStateManager
状态传递给子视图的最佳方式是什么?或者我应该采取完全不同的方法
请帮助:)根据您的描述,我认为使用
VisualStateManager.gostate
是一个不错的选择。
您只需要关注何时将状态发送回代码中的控件。例如,在下面的代码中,创建一个方法GoToState
将雕像传递给视图或控件
public partial class VsmValidationPage : ContentPage
{
public VsmValidationPage ()
{
InitializeComponent ();
GoToState(false);
}
void OnTextChanged(object sender, TextChangedEventArgs args)
{
bool isValid = Regex.IsMatch(args.NewTextValue, @"^[2-9]\d{2}-\d{3}-\d{4}$");
GoToState(isValid);
}
void GoToState(bool isValid)
{
string visualState = isValid ? "Valid" : "Invalid";
VisualStateManager.GoToState(helpLabel, visualState);
VisualStateManager.GoToState(submitButton, visualState);
}
}
谢谢你们的重播,但问题有点复杂。在您的示例代码中,某些内部可检测的内容(文本更改)会导致样式更改。在我的例子中,更改来自外部-父ContentView正在子视图中设置状态,这些子视图需要将状态更改传递给它的子视图。您能分享一个关于您的问题的演示吗?