如何解决当组合框在其自己的viewmodel中与enumList绑定时,如何从窗口按钮更改所选组合框的Value?
我的项目中有两个Windows和多个用户控件,其中一个用户控件 Ribbon 位于 MainWindow 上。
功能区是 groupBox 用户控件,其中包含 comboBox ,该控件与枚举PackageType绑定,如下所示:
namespace ManglamStellaris.ViewModels
{
public class RibbonViewModel : ViewModel
{
public event Action<PackageType> OnPackageSelection;
public RibbonViewModel()
{
ListPackageType = new List<Tuple<PackageType,string>>(new Tuple<PackageType,string>[]
{
new Tuple<PackageType,string>(PackageType.Raw,"Raw"),new Tuple<PackageType,string>(PackageType.Lagna,"Lagna"),string>(PackageType.LaalKitab,"LaalKitab")
});
}
public List<Tuple<PackageType,String>> ListPackageType { get; private set; }
public PackageType packageType
{
get { return _packageType; }
set
{
_packageType = value;
RaisePropertyChanged("packageType");
if (OnPackageSelection != null)
{
OnPackageSelection(_packageType);
}
}
}
private PackageType _packageType;
}
}
在enums.cs中定义了一个枚举PackageType:
public enum PackageType
{
Raw,Lagna,LaalKitab
}
RibbonViewModel 在 MainViewModel 中初始化如下:
public class MainViewModel : ViewModel
{
Dictionary<Type,object> _Services = new Dictionary<Type,object>();
public event Action<PackageType> OnPackageSelection;
public MainViewModel() {
Config = new ConfigViewModel();
Input = new InputViewModel();
Result = new CalculationResultViewModel();
RibbonViewModel = new RibbonViewModel();
RibbonViewModel.OnPackageSelection += (PackageType) => {
if (OnPackageSelection != null) {
OnPackageSelection(PackageType);
}
};
DoCalculationCommand = new RelayCommand(() => {
DoCalculation();
});
}
MainWindow根据选择类型控制在“主窗口”的内容控件区域中显示的用户控件:
public partial class MainWindow : Window
{
public MainViewModel ViewModel;
public ResultView ResultView;
public LagnaChart LagnaChart;
public LaalKitab LaalKitab;
public MainWindow(MainViewModel mainViewModel)
{
InitializeComponent();
ViewModel = mainViewModel;
ViewModel.OnPackageSelection += (PackageType) => {
if (PackageType == PackageType.LaalKitab)
{
this.mainContentArea.Content = LaalKitab;
}
else if (PackageType == PackageType.Lagna)
{
this.mainContentArea.Content = LagnaChart;
}
else if (PackageType == PackageType.Raw)
{
this.mainContentArea.Content = ResultView;
}
};
DataContext = ViewModel;
ResultView = new ResultView(ViewModel);
LagnaChart = new LagnaChart(ViewModel);
LaalKitab = new LaalKitab(ViewModel);
this.mainContentArea.Content = ResultView;
}
}
如何从另一个窗口按钮单击功能中选择组合框值,如下所示:
public partial class HomeWindow : Window
{
public LagnaChart LagnaChart;
MainViewModel _mainViewModel = new MainViewModel();
public HomeWindow()
{
InitializeComponent();
_mainViewModel = new MainViewModel();
DataContext = _mainViewModel;
}
private void LaalKitab(object sender,RoutedEventArgs e)
{
MainWindow mainWindow = new MainWindow(_mainViewModel);
_mainViewModel = new MainViewModel();
DataContext = _mainViewModel;
mainWindow.Show();
}
函数LaalKitab打开一个窗口,但是如何在LaalKitab函数本身中设置comboBox的值并传递它,以便它在“主窗口”内容区域中更改用户控件? 当我在运行时更改comboDropdown的值时,它可以完美工作。 预先感谢
解决方法
在HomeWindow.xaml.cs中,当按下按钮时,它仅创建主窗口的新实例,并使用下面的代码中的粗体行设置其包类型。
private void LaalKitab(object sender,RoutedEventArgs e)
{
MainWindow mainWindow = new MainWindow(_mainViewModel);
//This is how I change the combo box selection.
_mainViewModel.RibbonViewModel.packageType = PackageType.Lagna;
_mainViewModel = new MainViewModel();
DataContext = _mainViewModel;
mainWindow.Show();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。