gpt4 book ai didi

c# - 在不同的类中实现 INotifyPropertyChanged

转载 作者:行者123 更新时间:2023-12-03 10:43:37 27 4
gpt4 key购买 nike

我的应用程序中有 2 个 ViewModel。第一个(FirstPageViewModel)负责在我的 View 中的文本框中显示的数据。另一个 ViewModel (NavigationViewModel) 负责我的页面之间的导航并更改 TextBlocks 的值:

<StackPanel>
<Button Content="SecondPage"
DataContext="{Binding Source={StaticResource NavigationVM}}" /// reference to App.xaml
Command="{Binding NavigationCommand}"
CommandParameter="SecondPage" />
<Grid DataContext="{Binding Source={StaticResource FirstPageViewModel}}">
<TextBlock Text="{Binding helloWorld.Counter, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text="{Binding helloWorld.Message, UpdateSourceTrigger=PropertyChanged}"/>
...
</Grid>

现在导航工作正常。但是,如果我尝试使用“NavigationViewModel”中的 NavigationCommand(=Button Click)来更改 TextBlocks 中的值,则没有任何变化:
(TextBlockSetter 实现 INotifyPropertychanged)
public TextBlockSetter _helloWorld;


public NavigationViewModel()
{

_helloWorld = new TextBlockSetter();

}

public TextBlockSetter helloWorld
{
get
{
return _helloWorld;
}
set
{
_helloWorld = value;
}
}
private void navigationCommand(object destination)
{
switch (destination.ToString())
{
case "SecondPage":
{

... ///Code for page Navigation

helloWorld.Counter++;
helloWorld.Message = "done";
break;
}
}
}

“FirstPageViewModel”包含相同的实现并设置 TextBoxes 的值:
static int _roundCounter = 1;
public TextBlockSetter _helloWorld;

public FirstPageViewModel()
{
helloWorld.Counter = _roundCounter;
_helloWorld = new TextBlockSetter();

}

public TextBlockSetter helloWorld
{
get
{
return _helloWorld;
}
set
{
_helloWorld = value;
}
}

有人知道如何正确实现这些更改吗?我的想法是在应该更改文本框时在 NavigationViewModel 中对 FirstPageViewModel 进行引用。但不幸的是,我的想法都没有奏效。

最佳答案

我不完全理解,但是,只使用一个 View 模型怎么样
并在该 View 模型中定义一个屏幕属性。因此,您可以设置
该属性,然后在属性更改事件中导航。

public static readonly DependencyProperty ScreenNameProperty =
DependencyProperty.Register("ScreenName", typeof(String),
typeof(ContentControl), new FrameworkPropertyMetadata("screen_1", new PropertyChangedCallback(ScreenNameChanged)));

public String ScreenName
{
get { return (String)GetValue(ScreenNameProperty); }
set { SetValue(ScreenNameProperty, value); }
}

private static void ScreenNameChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
{
ContentControl originator = dependencyObject as ContentControl;
if (originator != null)
{
// navigate here
}
}

将 ScreenName 属性绑定(bind)到 View 模型中的属性。然后根据需要更改 View 模型中的属性。

关于c# - 在不同的类中实现 INotifyPropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39307337/

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