数据绑定一个WPF图形用户界面和一对夫妇列表框/复选框之间 [英] DataBinding Between a WPF GUI and a couple of ListBox/CheckBox
问题描述
我想要做的事情看起来很容易,但需要我大量的时间,没有任何结果.. = /
我想有一个WPF窗口,这需要一些礼仪对象,并用它来popolate几个项目。
在具体的收到的对象是这样定义的:
The thing i want to do looks easy, but takes me a lot of time without any result.. =/ I'd like to have a WPF window which takes an object with some proprieties and used it to popolate a couple of item. In the specific the object recieved is so defined:
public class ParameterForGraphicOptions
{
public List<VariablesOptions> Variables { get; set; }
public List<string> Simulations { get; set; }
public List<string> ShowSimulations { get; set; }
}
public class VariablesOptions
{
public string Name { get; set; }
public bool Show { get; set; }
public bool Average { get; set; }
public bool Var { get; set; }
}
,我想填充列表框2与模拟和ShowSimulations,也有连接到变量名和3复选框,其中改变它们的值另一个列表中,当您更改列表中所选项目..在Windows code(的.cs)如下:
And i'd like to populate 2 ListBox with Simulations and ShowSimulations, and also have another list which is connected to Variables Name and 3 check box which change their values when you change the selected item in the list.. The Windows code (.cs) follows:
public GraphicOptions(ParameterForGraphicOptions pfgo) //NAME OF THE WINDOW
{
InitializeComponent(); //STD CALL
this.DataContext = pfgo; //CONNECTING THE DATA CONTEXT
}
在XAML code绑定是这样的:
The XAML code for binding is this:
<Window x:Class="GUI.GraphicOptions"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="GraphicOptions" Height="450" Width="350">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="150"/>
<RowDefinition Height="25" />
<RowDefinition Height="150"/>
<RowDefinition Height="25"/>
<RowDefinition Height="25" />
<RowDefinition Height="11*" />
</Grid.RowDefinitions>
<Label Grid.Row="0">Simulation in Progress</Label>
<Label Margin="188,0,0,0">Simulation to Show</Label>
<ListBox Grid.Row="1" Height="150" HorizontalAlignment="Left" Name="Simulations" VerticalAlignment="Top" Width="140" />
<ListBox Grid.Row="1" Height="150" HorizontalAlignment="Left" Margin="188,0,0,0" Name="SimulationsToShow" VerticalAlignment="Top" Width="140" />
<Label Grid.Row="2">Variables to Show</Label>
<ListBox Grid.Column="0" Grid.Row="3" DataContext="{Binding Variables.Name}" Height="150" HorizontalAlignment="Left" Name="Variables" VerticalAlignment="Top" Width="140" Grid.RowSpan="2" />
<CheckBox Grid.Row="3" Content="Show" IsChecked="{Binding Variables.Show}" Height="20" HorizontalAlignment="Left" Name="Show" VerticalAlignment="Top" Width="76" Margin="163,5,0,0" />
<CheckBox Grid.Row="3" Content="Average" IsChecked="{Binding Variables.Average}" Height="25" HorizontalAlignment="Left" Name="Average" VerticalAlignment="Top" Width="76" Margin="174,54,0,0" Checked="Average_Checked" />
<CheckBox Grid.Row="3" Content="Var" IsChecked="{Binding Variables.Var}" Height="25" HorizontalAlignment="Left" Name="Variance" VerticalAlignment="Top" Width="76" Margin="163,31,0,0" />
<CheckBox Content="Refresh Graphic During Computation" Grid.Row="5" Height="25" HorizontalAlignment="Left" Name="Continuos" VerticalAlignment="Top" Width="220" />
<Button Content="Save" Grid.Row="5" Height="23" HorizontalAlignment="Left" Margin="253,1,0,0" Name="Save" VerticalAlignment="Top" Width="75" Click="Save_Click" />
<Button Content="->" Grid.Row="1" Height="35" HorizontalAlignment="Left" Margin="145,30,0,0" Name="OneSimulation" VerticalAlignment="Top" Width="35" />
<Button Content="=>" Grid.Row="1" Height="35" HorizontalAlignment="Left" Margin="145,65,0,0" Name="AllSimulation" VerticalAlignment="Top" Width="35" />
</Grid>
</Window>
我试过很多办法,但总是只绑定一个项目,所以我不明白为什么这个库的作品..
非常感谢所有4:P
I tried in many ways, but always bind only a item, so I can't understand HOW this library works.. Many thanks 4 all :P
现在的问题是:有没有在code I发布任何错误的事情
The question is: is there any wrong thing in the code i posted?
P.S:对不起,我的英语:P
P.S.: Sorry for my English :P
推荐答案
不要绑定多个项目的单一控制。与单一选择的项结合。
Don't bind a single control with plural items. Bind with a single selected item.
下面是一个正确的解决方案:
Here is a correct solution:
<ListBox x:Name="vars" ItemsSource="{Binding Variables}" DisplayMemberPath="Name" />
<CheckBox IsChecked="{Binding SelectedItem.Show, ElementName=vars, Mode=TwoWay}" />
<CheckBox IsChecked="{Binding SelectedItem.Average, ElementName=vars, Mode=TwoWay}" />
<CheckBox IsChecked="{Binding SelectedItem.Var, ElementName=vars, Mode=TwoWay}" />
这篇关于数据绑定一个WPF图形用户界面和一对夫妇列表框/复选框之间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!