2013-03-12 85 views
0

所以我有一个列表框,其中将包含未经检查的模板列表。列表框包含一个字符串列表;印模具有“'row'x'col'”的命名惯例。将列表框的SelectedItem属性绑定到两个单独的文本框

例子:02x09,05x06等

我也有两个文本框,允许用户手动在他们想要移动到模具打印类型,但不是整个字符串一个盒子,其独立在行文本框和列文本框中。

示例:txtRow x txtCol; 02在行文本框中,09在列文本框中将您带到02x09。

我希望用户也能够从未经审查的模具打印列表框中选择打印,并且能够从那里加载该地图。最简单的方法是将列表框的SelectedItem属性绑定到两个(行,列)文本框。这很容易,因为当用户输入打印的行和列坐标时,已经完成了用于映射印模的所有绘图。

的一大问题:

如何绑定两个文本框列表框单SelectedItem属性?

换句话说

如果在列表框中当前的SelectedItem是“02x09”,我怎么可以将绑定在“02”到行文本框和“09”的列文本框?

+0

为什么不在你的类中创建第三个字符串属性,它组合了这两个值并将第三项绑定到任何你想要的位置?或者我不理解,因为我应该? – 2013-03-12 19:14:37

+0

请解释三个属性的想法:我可以有三个属性:row,col和name,其中name只不过是“rowxcol”。我将如何正确地将所有这些绑定在一起?列表框将有一个名称列表(即“rowxcol”),行文本框将被绑定到行属性,而列文本框将被绑定到列属性。那么如何实际将listbox的SelectedItem属性的行部分和Listbox的SelectedItem属性的列部分绑定到两个独立的文本框? – kformeck 2013-03-12 19:20:41

+0

“TextBox”行将被绑定到行属性; “TextBox”列将被绑定到列属性;并且'ListBox'将被绑定到组合的属性。在属性设置器中添加代码以更新其他属性并为每个属性引发相关的“PropertyChangedEvent”。 – 2013-03-12 19:26:02

回答

1

我强烈建议您使用元素绑定和转换器来转换02x09的值。所以你的一个文本框会有第一个halp,第二个会有另一半。

这里是一个示例代码。为你。

<Window x:Class="WPFTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:converters="clr-namespace:WPFTest" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <converters:MyConverter x:Key="converter"/> 
    </Window.Resources> 
     <Grid> 
     <ListBox ItemsSource="{Binding Items}" Margin="0,0,360,0" x:Name="list"> 

     </ListBox> 
     <TextBox Text="{Binding Path=SelectedValue,Converter={StaticResource converter},ConverterParameter=0, ElementName=list}" Height="25" Width="100"/> 
     <TextBox Text="{Binding Path=SelectedValue,Converter={StaticResource converter}, ConverterParameter=1,ElementName=list}" Height="25" Width="100" Margin="208,189,209,106"/> 

    </Grid> 
</Window> 




public partial class MainWindow : Window 
    { 
     public List<string> Items { get; set; } 

     public MainWindow() 
     { 
      InitializeComponent(); 
      if (Items == null) 
       Items = new List<string>(); 
      Random ran = new Random(); 
      for (int i = 0; i < 10; i++) 
      { 
       Items.Add(ran.Next(1, 5) + "x" + ran.Next(5, 10)); 
      } 

      this.DataContext = this; 
     } 

    } 

    public class MyConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value == null) 
       return "Null"; 

      var values = value.ToString().Split(new string[] { "x" }, StringSplitOptions.None); 

      int x = 0; 
      if (int.TryParse(parameter.ToString(), out x)) 
      { 
       return values[x].ToString(); 
      } 


      return "N/A"; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
+0

这完美的作品!谢谢Jodha所有的帮助,非常感谢! – kformeck 2013-03-13 14:15:42