0

そのため、検査されていないダイ プリントのリストを含むリスト ボックスがあります。リスト ボックスには文字列のリストが含まれています。ダイプリントには、「'row'x'col'」という命名規則があります。

例: 02x09、05x06 など。

また、ユーザーが移動先のダイ プリントを手動で入力できるようにする 2 つのテキスト ボックスがありますが、文字列全体を 1 つのボックスではなく、行のテキスト ボックスと列のテキスト ボックスに分けています。

例: txtRow x txtCol; 行のテキスト ボックスに 02、列のテキスト ボックスに 09 を入力すると、02x09 に移動します。

ユーザーが未検査のダイ プリント リスト ボックスからプリントを選択し、そこからそのマップをロードできるようにしたいと考えています。これを行う最も簡単な方法は、リスト ボックスの SelectedItem プロパティを 2 つの (行、列) テキスト ボックスにバインドすることです。ユーザーがプリントの行と列の座標を入力すると、ダイプリントをマッピングするためのすべての配管がすでに行われているため、これは簡単です。

大きな疑問:

2 つのテキスト ボックスをリスト ボックスの 1 つの SelectedItem プロパティにバインドするにはどうすればよいですか?

言い換えると、

リスト ボックスの現在の SelectedItem が "02x09" の場合、"02" を行のテキスト ボックスにバインドし、"09" を列のテキスト ボックスにバインドするにはどうすればよいですか?

4

1 に答える 1

1

要素バインディングとコンバーターを使用して、02x09 から値を変換することをお勧めします。したがって、1つのテキストボックスには前半があり、2番目には残りの半分があります。

ここにサンプルコードがあります。あなたのために。

<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();
        }
    }
于 2013-03-12T19:34:20.207 に答える