我经历了类似的问题,但我没有找到适合我的代码的答案。我正在尝试使用WPF将数据(客户端类型Id)从名为Client的视图模型传递到View Model Named(每个客户端都有多行,因此我输入的行应该知道哪个客户端是所有者)
更新:AddCommand
这是客户代码:
public class CRMClientViewModel : BaseViewModel
{
static string currentClient;
public Command AddLineCommand { get; set; }
public CRMClientViewModel(object obj)
{
AddLineCommand = new Command(OnAddLineCommand);
}
void OnAddLineCommand(object obj)
{
MainWindowViewModel.Instance.ShowCRMClient = false;
MainWindowViewModel.Instance.ShowCRMLine = true;
}
private string _clientId;
public string ClientId
{
get { return _clientId; }
set
{
_clientId = value;
RaisePropertyChanged();
currentClient = value;
}
}
}
}
基本视图模型包含:
public class BaseViewModel : INotifyPropertyChanged
{public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
这是客户端视图的xaml:
<UserControl x:Class="DiamondCellular.View.CRMClientView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ViewModel="clr-namespace:DiamondCellular.View.ViewModels"
xmlns:local="clr-namespace:DiamondCellular.View"
mc:Ignorable="d"
Height="350" Width="525" FontSize="18" Background="White">
<UserControl.DataContext>
<ViewModel:CRMClientViewModel/>
</UserControl.DataContext>
<Button x:Name ="Add" Content="AddLine" Command ="{Binding AddLineCommand}" Grid.Column="4" Grid.Row="6" Foreground="#FFFF0012" Margin="0,10.4,17.8,9.8" VerticalAlignment="Center" HorizontalAlignment="Right" FontSize="12" Width="71"/>
</UserControl>
我正在尝试将客户端ID从客户端视图传递到线视图模型
答案 0 :(得分:0)
如果我理解得对,你想拥有一个经典的Master-Detail-view又称为亲子。
你可以传递&#34;父母&#34;给你的孩子&#34;在构造函数中。
void OnAddLineCommand(object obj)
{
//...
var lineVM = new LineViewModel(this);
this.Lines.Add(lineVM);
//...
}
我假设您想要使用客户端的行(无论是什么)。您需要一个包含Line
s
public ObservableCollection<LineViewModel>{get;}
保存父级(在您的情况下为Client
)时,您也会保存所有孩子。
答案 1 :(得分:0)
这就是我最后的所作所为:
创建了一个存储库类 我把一个singelton放到Init只有一次,所有的视图模型都可以获得Access :
public class UIRepository
{
private static volatile UIRepository instance;
private static object syncRoot = new Object();
private UIRepository(){}
public static UIRepository Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new UIRepository();
}
}
return instance;
}
}
private string _currentClientId;
public string CurrentClientId
{
get { return _currentClientId; }
set { _currentClientId = value; }
}}
在属性clientId中的Client ViewModel类中(在xaml中有绑定)我输入new clientId
private string _clientId;
public string ClientId
{
get { return _clientId; }
set
{
_clientId = value;
RaisePropertyChanged();
UIRepository.Instance.CurrentClientId = ClientId;
}
}
然后我在客户端类中添加了一个命令,当我更改为新视图时进入clientId(通过使用可见性属性上的绑定:
private void OnAddLineCommand(object obj)
{
MainWindowViewModel.Instance.ShowCRMClient = false;
MainWindowViewModel.Instance.ShowCRMLine = true;
UIRepository.Instance.CurrentClientId = ClientId;
}
多数人