2011-02-18 47 views
0

我正在构建一系列管理表单作为我的应用程序的一部分。Silverlight 4中的组合框/数据网格的简单主/细节场景

许多形式有这种相同的情况下,我想知道什么来管理,这是最好的办法......

Here's a screenshot of an example from the old winforms app.不是所有的形式都是这个简单的,但我想这是一个好地方开始。

第一个字段总是一个组合框。用户选择一个项目后,其他字段将填充相关数据。

目前,我的ViewModel包含一个ObservableCollection<circuit>(在本例中)。我不确定如何设置我的绑定,给定主/主细节场景,其中您的主(主要组合框)也是您的详细信息(CircuitName字段)的一部分。我正在考虑拉出组合框,选择一个项目后,显示一个数据网格。有没有更好的办法?如果我走这条路线,我已经阅读了几篇文章,指出绑定数据网格中的组合框,而绑定selectedValue prop的属性是总PITA。显然有一个组合框将需要用户创建/编辑现有的CircuitName ...

你的想法?

回答

1

我不知道我完全理解,但如果我使用MVVM Light,就​​像我认为你是:)而且我想复制上面的屏幕我会做这样的事情。但我可能不是100%理解你的意思。

使用System.Collections.ObjectModel
<Grid x:Name="LayoutRoot"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 

    <StackPanel Grid.ColumnSpan="2"> 
     <TextBlock Text="Circuit Name"/> 
     <ComboBox SelectedValue="{Binding SelectedCircuit,Mode=TwoWay}" ItemsSource="{Binding Circuits}" DisplayMemberPath="Name"/> 

    </StackPanel> 

    <StackPanel Grid.Column="0" Grid.Row="1"> 
     <TextBlock Text="Circuit Code"/> 
     <TextBlock Text="{Binding SelectedCircuit.Code}"/> 
    </StackPanel> 

    <StackPanel Grid.Column="1" Grid.Row="1"> 
     <TextBlock Text="Voltage"/> 
     <TextBlock Text="{Binding SelectedCircuit.Voltage}"/> 
    </StackPanel> 

    <Button Grid.Row="2" Content="Okay"></Button> 
    <Button Grid.Row="2" Grid.Column="1" Content="Cancel"></Button> 

</Grid> 

; 使用GalaSoft.MvvmLight; using MvvmLight1.Model;

命名空间MvvmLight1.ViewModel {

public class MainViewModel : ViewModelBase 
{ 

    public MainViewModel() 
    { 

     Circuits = new ObservableCollection<Circuit> 
         { 
          new Circuit {Code = "123123", Name = "Test1", Voltage = 2.2, Id = 1}, 
          new Circuit {Code = "14224", Name = "Test2", Voltage = 3.2, Id = 2}, 
          new Circuit {Code = "54234", Name = "Test3", Voltage = 4.2, Id = 3}, 
         }; 

    } 

    public ObservableCollection<Circuit> Circuits { get; set; } 

    private Circuit _selectedCircuit; 
    public Circuit SelectedCircuit 
    { 
     get { return _selectedCircuit; } 
     set { _selectedCircuit = value; 
     RaisePropertyChanged("SelectedCircuit"); 
     } 
    } 
} 

}

命名空间MvvmLight1.Model {

public class Circuit 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public string Code { get; set; } 

    public double Voltage { get; set; } 

} 

}

+1

虽然我发现我自己的答案(!而且它是完全一样的你,除了在我们的数据是如何填充明显的区别),我把它送给你为了付出如此多的努力:)谢谢。 – 2011-02-18 23:42:57

0

答案是非常简单的实际。

我有我的ObservableCollection<Circuit> Circuits加载到VM构造函数中。我创建了ObservableCollection<Circuit> SelectedCircuit。然后我的XAML看起来是这样的:

<ComboBox ItemsSource="{Binding Configs}" 
      SelectedValue="{Binding SelectedConfig, Mode=TwoWay}" 
      DisplayMemberPath="SwitchCode" 
       /> 
<toolkit:DataForm CurrentItem="{Binding SelectedConfig}" AutoEdit="False" />