UNl*_*nel 2 converter mvvm viewmodel uwp uwp-xaml
我不明白为什么这么简单的事情会让我这么麻烦,但仍然如此.我有这个转换器:
public class BoolToVisibleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value is bool && (bool)value)
return Visibility.Visible;
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return (value is Visibility && (Visibility)value == Visibility.Visible);
}
}
Run Code Online (Sandbox Code Playgroud)
这个视图模型:
public class LoginViewModel: INotifyPropertyChanged
{
private bool isHowToVisibile;
public bool IsHowToVisible
{
get { return isHowToVisibile; }
set { isHowToVisibile = value; Notify(nameof(IsHowToVisible)); }
}
public event PropertyChangedEventHandler PropertyChanged;
public void Notify(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public void ShowHowTo()
{
IsHowToVisible = true;
}
}
Run Code Online (Sandbox Code Playgroud)
在xaml中我有一个激活ShowHowTo并将IsHowToVisible更改为true的按钮,以及一个其可见性与视图模型属性IsHowToVisible绑定的堆栈面板,它看起来像这样:
<AppBarButton Label="How To Play" Icon="Help" Click="{x:Bind loginViewModel.ShowHowTo}"/>
<StackPanel Name="HowTo" Grid.ColumnSpan="3" Grid.RowSpan="6" Visibility="{x:Bind loginViewModel.IsHowToVisible,Converter={StaticResource boolToVis},Mode=OneWay}">
<Button Name="CloseHowTo" Content="Close" Click="CloseHowTo_Click" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,10,10,10"/>
<Image Source="Assets/HowTo.jpg" Stretch="Fill" Margin="10,10,10,10"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
xaml知道转换器:
xmlns:con="using:MyApp.Converters"
<Page.Resources>
<con:BoolToVisibleConverter x:Key="boolToVis"/>
</Page.Resources>
Run Code Online (Sandbox Code Playgroud)
按钮有效.使用调试器行走会显示视图模型中的属性确实更改为true,并且propertyChanged事件会触发.但就是这样.我在转换器中设置了一个断点并且它没有到达那里.
我尝试重建和部署,将模式更改为Mode = TwoWay,没有任何帮助.我究竟做错了什么?
在我的测试中,您的上述代码运行良好,请确保您在关注xaml 时可以转到定义(或F12)<con:BoolToVisibleConverter />.
另一方面,如果您的应用程序定位于Windows 10版本1607及更高版本,则可以删除BoolToVisibleConverter代码,而无需在xaml中使用转换.从Windows 10版本1607开始,XAML框架提供了内置的布尔值到可见性转换器.转换器将true映射到Visible枚举值,将false映射到Collapsed,这样您就可以将Visibility属性绑定到布尔值而无需创建转换器.请注意,这不是函数绑定的功能,只是属性绑定.要使用内置转换器,您应用的最低目标SDK版本必须为14393或更高版本.当您的应用面向早期版本的Windows 10时,您无法使用它.
如果您仍然遇到此问题,则可以创建可以重现它的最小样本.
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |