好的..我有点迷失了。我拥有的是
window1.xaml
只是一个选择不同环境的组合框
然后我有一个 它显示基于环境的数据
当应用加载并显示正确的数据时,我有一个默认环境。
问题:我希望在选择不同的环境时更改仪表板数据。
我一直在努力争取这一天,而且我没有得到任何地方......任何帮助都会受到赞赏......
到目前为止代码:
EnvironmentView.xaml
<UserControl.DataContext>
<vm:EnvironmentViewModel />
</UserControl.DataContext>
<StackPanel Orientation="Horizontal">
<TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Center" Text="Environment:" Margin="0,0,5,0" />
<ComboBox x:Name="environments" ItemsSource="{Binding Data}" SelectedItem="{Binding Data}" SelectedIndex="0" ></ComboBox>
</StackPanel>
EnivronmentViewModel.cs
public class EnvironmentViewModel : BaseModelView {
public ObservableCollection<string> _data;
public ObservableCollection<string> Data
{
get {
if (this._data == null)
{
_data = new ObservableCollection<string>();
foreach (ConnectionStringSettings connectionString in ConfigurationManager.ConnectionStrings)
{
this._data.Add(connectionString.Name);
}
}
return this._data;
}
set {
if (_data == value) return;
_data = value;
OnPropertyChanged("Data");
}
}
DashboardView.xaml
<UserControl.DataContext>
<viewmodel:DashboardViewModel />
</UserControl.DataContext>
<Border Style="{StaticResource ThickBorderStyle}">
<StackPanel>
<TextBlock Text="Current Bugs" />
<data:DataGrid x:Name="dataview" Width="Auto" Height="Auto" ItemsSource="{Binding Data}">
</data:DataGrid>
</StackPanel>
</Border>
DashboardViewModel.cs
private DashboardRepository _repository;
public ObservableCollection<DashBoardCount> _data;
public DashboardViewModel() {
_repository = new DashboardRepository();
}
public ObservableCollection<DashBoardCount> Data
{
get
{
if(this._data==null)
{
IQuery q = new Query() { ConnectionStringKey = this.ConnectionStringKey };
_data = this._repository.Get(q);
}
return _data;
}
set {
if (_data == value) return;
_data = value;
OnPropertyChanged("Data");
}
}
答案 0 :(得分:0)
您将SelectedItem
上的ComboBox
绑定到ViewModel中的另一个属性(不是集合)。
然后添加button
并将Command
绑定到ViewModel中的ICommand
。
此命令应使用selectedItem显示该仪表板。
(也许有一种方法可以在不添加按钮的情况下完成,但我自己就是MVVM新手并且不知道怎么做)
答案 1 :(得分:0)
有很多方法可以实现这个......
我的建议是,现在你有两个独立的“视图/模型” - 你需要一些东西来组合/集成它们 - 你可以再次使用MVVM模式 - 我现在正在假设window1.xaml是为了做到这一点。
因此,您可以将window1.xaml重命名为mainView.xaml,然后添加一个mainViewModel.cs。然后,就像Eduardo说的那样,制作一个存取器但是把它放在你的mainViewModel.cs中 - 你可以把它叫做selectedEnvironment&amp; selectedDashboard。如果你那时你的用户控制“Enviroment”&amp;主视图上的“仪表板”可以绑定它们。
现在,看看你的ViewModel,我不确定你打算如何将基于environmentModel的相关数据传递给dashboardModel - 你需要设置某种关系 - 你可以在EnviromentViewModel或mainViewModel ...但我现在看不到任何明确的关系?如果您打算基于访问者数据建立关系,您需要将其作为一种常见类型吗?
另外,在旁注中我注意到你确定为什么你把_data作为公共,因为你已经创建了公共访问者数据,你肯定想要保留_data吗?