gpt4 book ai didi

c# - 引用相同 View 模型的两个 View

转载 作者:行者123 更新时间:2023-11-30 14:02:51 25 4
gpt4 key购买 nike

我正在使用两个引用相同 View 模型的 View 。我的两个 View 都包含一个绑定(bind)到 View 模型中的值的文本框。我的问题是,如果我在一个 GUI 中更改文本框的值,它不会反射(reflect)在另一个 GUI 中。我应该怎么做才能实现这一目标?

这是我的 View 模型

    public class ProductViewModel:INotifyPropertyChanged
{
private int machineheight;

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{

if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion

public int MachineHeight
{
get
{
return this.machineheight;
}
set
{
this.machineheight = value;
RaisePropertyChanged("MachineHeight");
}
}

public ProductViewModel()
{
}

private ICommand mUpdater;
public ICommand UpdateCommand
{
get
{
if (mUpdater == null)
mUpdater = new Updater();
return mUpdater;
}
set
{
mUpdater = value;
}
}

private class Updater : ICommand
{
#region ICommand Members
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
SecondWindow w = new SecondWindow();
w.Show();
}
#endregion
}
}
}

第二个窗口是另一个 GUI。单击更新按钮后,将打开第二个窗口。但是我在第一个 UI 中更改的值不会在新窗口中更新。

我的 Xaml 对于两个 UI 都是相似的..

<Window x:Class="WPFDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPFDemo"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:ProductViewModel/>
</Window.DataContext>


<Grid Height="307" Width="480" Initialized="Grid_Initialized">
<Button Content="Update" Height="32" HorizontalAlignment="Left" Margin="165,158,0,0" Name="button1" VerticalAlignment="Top" Width="114" Command="{Binding Path=UpdateCommand}"/>
<TextBox Height="42" HorizontalAlignment="Left" Margin="125,82,0,0" Name="textBox1" VerticalAlignment="Top" Width="169" Text= "{Binding Path= MachineHeight, Mode=TwoWay}" />
</Grid>
</Window>

我其实不知道是什么问题..谢谢

最佳答案

<Window.DataContext>
<local:ProductViewModel/>
</Window.DataContext>

你好,如果你把它放在你的 2 个 View 中,那么每个 View 都有自己的 View 模型。所以你永远不会看到任何变化。您必须将数据上下文从第一个 View 设置为第二个 View 。顺便说一句,对于您的 ICommand 实现,请查看一些 mvvm 框架以实现更简单的实现,例如 RelayCommand、DelegateCommand。

对于您的实际实现,您可以将以下内容添加到您的 xaml 和 ViewModel(CommandParameter) 中,然后它就可以工作了。

<Button Content="Update" Height="32" HorizontalAlignment="Left" Margin="165,158,0,0" Name="button1" VerticalAlignment="Top" Width="114" Command="{Binding Path=UpdateCommand}"
CommandParameter="{Binding .}"/>

public void Execute(object parameter)
{
SecondWindow w = new SecondWindow();
w.DataContext = parameter;
w.Show();
}

关于c# - 引用相同 View 模型的两个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5065377/

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