gpt4 book ai didi

c# - x :Bind and nested class in a UWP application

转载 作者:行者123 更新时间:2023-12-03 10:44:28 26 4
gpt4 key购买 nike

我目前正在开发一个 UWP 应用程序,我想使用已编译的绑定(bind)系统。

我有一个扩展 Windows.UI.Xaml.Controls.Page 的基础包含属性 ViewModel .

这里是 ViewModel 的基类属性(property) :

 public class BaseViewModel : INotifyPropertyChanged
{

public event PropertyChangedEventHandler PropertyChanged;

protected void RaiseOnPropertyChanged([CallerMemberName] string propertyName = "")
{
OnPropertyChanged(propertyName);
}

public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

}

这是我的基本页面:
public abstract class BasePage : Page
{

public BaseViewModel ViewModel { get; set; }

}

我的应用程序页面扩展了 BasePage并包含一个扩展 BaseViewModel 的嵌套(内部)类类(class)。这里有一个示例代码:
public sealed partial class MyPage : BasePage
{

public sealed class MyViewModel : BaseViewModel
{

public string Title
{
get
{
return "Test";
}
}

}

public MyPage()
{
InitializeComponent();
ViewModel = MyViewModel();
}
}

现在,我想绑定(bind)属性 TitleMyViewModel类到我的用户界面。根据 this articlethis one ,类似的东西应该可以工作:
<TextBlock 
Text="{x:Bind ViewModel.(namespace:MyPage+MyViewModel.Title)}"
/>

不幸的是,我无法编译。生成的文件有几个错误 MyPage.g.cs由于“+”字符。您知道 UWP 应用程序是否支持嵌套(内部)类的绑定(bind)?也许它仅在 WPF 应用程序上受支持? :(

感谢您的帮助 !

最佳答案

解决方案是使用新属性以避免强制转换和嵌套类访问 XAML 文件。所以解决方案是使用类似的东西:

public sealed partial class MainPage : BasePage
{

public sealed class MyViewModel : BaseViewModel
{
public string Title
{
get
{
return "Test";
}
}
}

public MyViewModel LocalViewModel
{
get
{
return (MyViewModel) ViewModel;
}
}

public MainPage()
{
this.InitializeComponent();
ViewModel = new MyViewModel();
}
}

因此,使用 x:Bind语法,XAML 看起来像:
<TextBlock Text="{x:Bind LocalViewModel.Title}" />

关于c# - x :Bind and nested class in a UWP application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33569454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com