- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 wpf App.xaml.cs 文件中有以下代码:
void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
var mainVM = MainWindowViewModel.Instance;
mainVM.DisplayMessage = string.Format("Something went wrong and it has been logged...If the problem persists, please contact {0}.", mainVM.NotificationsReceiver);
mainVM.DisplayMessageForegroundColor = "Red";
e.Handled = true;
}
public string DisplayMessage
{
get
{
return m_displayMessage;
}
set
{
m_displayMessage = value;
OnPropertyChanged("DisplayMessage");
}
}
public string DisplayMessageForegroundColor
{
get
{
return m_displayMessageForegroundColor;
}
set
{
m_displayMessageForegroundColor = value;
OnPropertyChanged("DisplayMessageForegroundColor");
}
}
<Label Content="{Binding DisplayMessage}" Foreground="{Binding DisplayMessageForegroundColor}" Grid.Column="1" HorizontalAlignment="Left" Height="33" Margin="14,660,0,0" Grid.Row="1"
VerticalAlignment="Top" Width="693" Grid.ColumnSpan="3"/>
最佳答案
问题是你写了一个单例 View 模型,带有一个单例 Instance
,但是你不使用它。相反,您在 XAML 中创建 View 模型的新不同实例:
<Window.DataContext>
<MainViewModel:MainWindowViewModel />
</Window.DataContext>
MainWindowViewModel
的新实例.如果您的 XAML 有
<TextBox .../>
,你以为只有一个
TextBox
在世界上,你只是把它放在一个新的地方?当然不是。您正在创建一个新的
TextBox
.任何其他 XAML 元素也是如此。
Window.DataContext
我在上面引用的元素。
DataContext
反而:
<Window
...etc...
xmlns:MainViewModel="clr-namespace:Whatever.Namespace.YourViewModel.IsIn"
DataContext="{x:Static MainViewModel:MainWindowViewModel.Instance}"
...etc...
>
<Window.DataContext>
<x:StaticExtension
Member="MainViewModel:MainWindowViewModel.Instance" />
</Window.DataContext>
<x:StaticExtension ...
与
{x:Static...
相同.
System.Windows.Markup.StaticExtension
是
MarkupExtension
的子类.如果其中一个具有
Extension
后缀,XAML 允许您在将其用作大括号之间的标记扩展时省略名称的该部分。试试这个;它会工作:
DataContext="{x:StaticExtension MainViewModel:MainWindowViewModel.Instance}"
Binding
(
System.Windows.Data.Binding
) 是
MarkupExtension
也是。这就是为什么您可以在 XAML 中的属性值中使用花括号创建一个:
<TextBox Text="{Binding Foo}" />
Text="{Binding Foo}"
创建
System.Windows.Data.Binding
的实例.但是
Binding
没有
Extension
类名的后缀。这不是必需的,它只是 XAML 提供的一种便利,如果您愿意使用它。
Property="{Identifier ...}"
在 XAML 中,
Identifier
是一个派生自
System.Windows.Markup.MarkupExtension
的类.它的实际名称可能是
Identifier
或
IdentifierExtension
,并且那个花括号的东西正在创建和初始化它的一个实例。
MainWindowViewModel
的构造函数私有(private):
public class MainWindowViewModel : ViewModelBaseOrWhatever
{
// If MainWindowViewModel has no public constructors, no other class can create an
// instance of it. This is a requirement you need to enforce, so and you can make
// the compiler enforce it for you. If you had done this, the compiler would have
// found this bug for you as soon as you wrote it.
private MainWindowViewModel()
{
// ...whatever...
}
static MainWindowViewModel()
{
Instance = new MainWindowViewModel();
}
public static MainWindowViewModel Instance { get; private set; }
}
Instance
来强制它们的单例性质。在静态构造函数中:
private MySingletonViewModel()
{
// stuff
}
public static MySingletonViewModel Instance { get; private set; }
// Static constructor
static MySingletonViewModel()
{
Instance = new MySingletonViewModel();
}
'MySingletonViewModel.MySingletonViewModel()' is inaccessible due to its protection level.
public SomeOtherClass()
{
var x = new MySingletonViewModel();
}
关于c# - app.xaml.cs 与 MainViewmodel 通信的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40516008/
我正在创建一个简单的 WPF 应用程序,用于使用 Observable 集合(遵循 MVVM 模式)将 Datagrid 数据绑定(bind)到数据库。 App.xaml.cs 类 public pa
我有一个关于 VM 通信的问题。 这是我在 C#/WPF 应用程序中的代码。在我的 MainWindow.xam 上,我有一个按钮。 单击此按钮时, 我需要从另一个 ViewModel 中访问和修改
我有一个项目有 3 View / View 模型 (当然直到现在!)。所以我有一个 ListView 在 主视图 显示它们中的每一个,并且可以由用户选择。所以我用了这样的东西: class MainV
我有这个代码: public partial class App : Application { protected override void OnStartup(Start
我正在用一个简单的项目测试刀柄,我想要实现的是用刀柄生成我的 MainViewModel 的一个实例,这是我到目前为止所做的 主要 Activity @AndroidEntryPoint class
我目前在 2 个 ViewModel 之间进行通信时遇到问题。在这里下载我的应用程序以查看问题:http://www76.zippyshare.com/v/26081324/file.html 我有
在 kotlin 协程实验室样本中,https://codelabs.developers.google.com/codelabs/kotlin-coroutines/#6 它通过传递 MainVie
当我设计 MVVM 应用程序时,通常会出现以下场景。一个窗口,有多个 child ,共享相同的数据源。 我正在尝试确定为所有 child 实现单一数据源的最佳方式。我可以想到 3 种选择,各有优缺点。
为我的 View 模型使用 MVVM 灯光构建 WP7 应用程序。我正在使用通过 NuGet 添加库时添加的 ViewModelLocator。效果很好,但现在我需要从代码中访问 ViewModel。
我有一个正在开发的应用程序。它可以处于两种状态(已连接和已断开)。我的 MainViewModel 中有一个 bool 属性,用于跟踪当前状态。 我的应用程序中有许多其他 View (和 ViewMo
我的 wpf App.xaml.cs 文件中有以下代码: void App_DispatcherUnhandledException(object sender, System.Windows.Th
我有两个 View :MainView 和 DetailView。我有一个要显示的项目列表,当用户选择一个项目时,我将项目属性传递给 DetailViewModel 并且用户可以更新这些值。 到目前为
我有一个正在开发的与股票相关的应用程序。 它有点像 Josh Smith 的 MVVM 演示应用程序,并添加了一些内容。 我有一个名为 ShortQuote.cs 的数据模型 它有一个 View 模型
我正在尝试从 Avalonia 中的 ItemsControl 按钮创建 ReactiveUI MVVM 绑定(bind)在 WPF 中,这将通过 Freezable BindingProxy 完成。
我正在尝试从 Avalonia 中的 ItemsControl 按钮创建 ReactiveUI MVVM 绑定(bind)在 WPF 中,这将通过 Freezable BindingProxy 完成。
我无法通过 MainViewModel 将 2 个 ViewModels 绑定(bind)到一个 View。 我的 MainWindow.xaml 如下所示:
我是一名优秀的程序员,十分优秀!