2013-03-12 83 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