C# 使用MVVM的Windows 10应用程序-使用按钮在不同视图/页面上设置另一控件的IsLocked属性
我不熟悉Windows10上的XAML和通用应用程序开发。我正在学习MVVM,并想做以下工作: 我有一个名为Shell的视图,其中包含一个SplitView控件。我想在SplitView窗格上使用一个ToggleButton,单击该按钮时,在另一个名为MainPage的视图中设置Pivot控件的IsLocked属性C# 使用MVVM的Windows 10应用程序-使用按钮在不同视图/页面上设置另一控件的IsLocked属性,c#,xaml,mvvm,win-universal-app,C#,Xaml,Mvvm,Win Universal App,我不熟悉Windows10上的XAML和通用应用程序开发。我正在学习MVVM,并想做以下工作: 我有一个名为Shell的视图,其中包含一个SplitView控件。我想在SplitView窗格上使用一个ToggleButton,单击该按钮时,在另一个名为MainPage的视图中设置Pivot控件的IsLocked属性 我的问题是有哪些技术可以做到这一点?要在ViewModels之间进行通信,您应该使用类似MVVM Light Messenger的Messenger 像这样: class ViewM
我的问题是有哪些技术可以做到这一点?要在ViewModels之间进行通信,您应该使用类似MVVM Light Messenger的Messenger 像这样:
class ViewModel1
{
private void sendMessage()
{
Messenger.Default.Send<InputStringMessage>(msg);
}
}
类视图模型1
{
私有void sendMessage()
{
Messenger.Default.Send(msg);
}
}
类视图模型2
{
公共视图模型2()
{
Messenger.Default.Register(this,(action)=>ReceiveInputMessage(action));
}
受保护的无效接收InputMessage(InputStringMessagemessage)
{
...
}
对ToggleButton的IsChecked属性使用双向数据绑定,并将其绑定到ShellViewModel上名为IsPivotLocked的属性
ToggleButton IsChecked=“{Binding IsPivotLocked,Mode=TwoWay}”
然后在MainPageViewModel中传递对ShellViewModel的引用,并将其作为名为Shell的属性公开。然后进入MainPageView并在Pivot的IsLocked属性上使用单向数据绑定,如下所示:
Pivot IsLocked=“{Binding Shell.IsPivotLocked}”
请注意,IsPivotLocked属性需要调用PropertyChanged事件才能正常工作。使用新的编译绑定,您可以简单地从pivot将IsLocked属性绑定到从ToggleButton选中的IsChecked属性 必须在您的应用程序资源中声明:
<Application
x:Class="xbindcontrol.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:xbindcontrol"
RequestedTheme="Light">
<Application.Resources>
<ResourceDictionary>
<local:NullableBoolToBoolConverter x:Key="NullableBoolToBoolConverter" />
</ResourceDictionary>
</Application.Resources>
</Application>
<SplitView DisplayMode="Inline" IsPaneOpen="True">
<SplitView.Pane>
<StackPanel>
<ToggleButton Content="Lock/Unlock" x:Name="toggle" />
</StackPanel>
</SplitView.Pane>
<Pivot x:Name="pivot" IsLocked="{x:Bind toggle.IsChecked, Mode=OneWay, Converter={StaticResource NullableBoolToBoolConverter}}">
<PivotItem Header="item 1">
</PivotItem>
<PivotItem Header="item 2">
</PivotItem>
</Pivot>
</SplitView>
public class NullableBoolToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var nullableValue = (value as bool?);
return nullableValue.HasValue && nullableValue.Value;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
<Application
x:Class="xbindcontrol.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:xbindcontrol"
RequestedTheme="Light">
<Application.Resources>
<ResourceDictionary>
<local:NullableBoolToBoolConverter x:Key="NullableBoolToBoolConverter" />
</ResourceDictionary>
</Application.Resources>
</Application>