2017-01-31 9 views
0

私は、ユーザーがこのようなグリッドのアルファベット文字を選択することができるようにする必要がありますSilverlightのウィジェット、作っています:使用のRadioButton Silverlightでアルファベット文字を選択する(XAML)

enter image description here

をと私は一番上の行にAをクリックした場合、それは次のようになりなければならない。

enter image description here

を、それがchararrayのような文字列のように表現されるのviewmodelで、1が持つ配列を含むように、私は2はd、hなどの配列を含んでいます。

今、私の質問は、これを表現する最良の方法は何ですか?

私の最初のアイデアは、手紙でグループ化されたradioButtonsを持つことでした。その後、

<RadioButton GroupName="a" Grid.Column="1" Grid.Row="1" IsChecked="{Binding 1, Mode=TwoWay, Converter={StaticResource BSMClassConverter}, ConverterParameter='a'}" ></RadioButton> 
<RadioButton GroupName="a" Grid.Column="1" Grid.Row="2" IsChecked="{Binding 2, Mode=TwoWay, Converter={StaticResource BSMClassConverter}, ConverterParameter='a'}" ></RadioButton> 
<RadioButton GroupName="a" Grid.Column="1" Grid.Row="3" IsChecked="{Binding 3, Mode=TwoWay, Converter={StaticResource BSMClassConverter}, ConverterParameter='a'}" ></RadioButton> 

と文字列に情報を変換するコンバータを内蔵しています。しかし、私はこれがどう動くかについて私の頭を包み込むことはできません。私はこれを行うには良い方法があります確信している

答えて

2

:-)良いアイデアとそこに誰かがそこにあると思いますが、これはコマンドではなく、コンバータ使用して、動作します:

<Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 

    <RadioButton Content="a" GroupName="a" Grid.Row="0" Grid.Column="0" Command="{Binding UpdateSelection}" CommandParameter="1;a" /> 
    <RadioButton Content="a" GroupName="a" Grid.Row="1" Grid.Column="0" Command="{Binding UpdateSelection}" CommandParameter="2;a" /> 
    <RadioButton Content="a" GroupName="a" Grid.Row="2" Grid.Column="0" Command="{Binding UpdateSelection}" CommandParameter="3;a" /> 

    <RadioButton Content="b" GroupName="B" Grid.Row="0" Grid.Column="1" Command="{Binding UpdateSelection}" CommandParameter="1;b" /> 
    <RadioButton Content="b" GroupName="B" Grid.Row="1" Grid.Column="1" Command="{Binding UpdateSelection}" CommandParameter="2;b" /> 
    <RadioButton Content="b" GroupName="B" Grid.Row="2" Grid.Column="1" Command="{Binding UpdateSelection}" CommandParameter="3;b" /> 

    <RadioButton Content="c" GroupName="C" Grid.Row="0" Grid.Column="2" Command="{Binding UpdateSelection}" CommandParameter="1;c" /> 
    <RadioButton Content="c" GroupName="C" Grid.Row="1" Grid.Column="2" Command="{Binding UpdateSelection}" CommandParameter="3;c" /> 
    <RadioButton Content="c" GroupName="C" Grid.Row="2" Grid.Column="2" Command="{Binding UpdateSelection}" CommandParameter="3;c" /> 

</Grid> 

あなたのViewModelで:

List<string> row1List = new List<string>(); 
    List<string> row2List = new List<string>(); 
    List<string> row3List = new List<string>(); 

    public RelayCommand<string> UpdateSelection { get; private set; } 

    public MainViewModel() 
    { 
     UpdateSelection = new RelayCommand<string>((str) => UpdateSelectionExecute(str)); 
    } 

    private void UpdateSelectionExecute(string str) 
    { 
     string[] split = str.Split(';'); 

     switch (split[0]) 
     { 
      case "1": 
       Remove(split[1]); 
       row1List.Add(split[1]); 
       break; 
      case "2": 
       Remove(split[1]); 
       row2List.Add(split[1]); 
       break; 
      case "3": 
       Remove(split[1]); 
       row3List.Add(split[1]); 
       break; 
     } 

     OutputToConsole(); 

    } 

    private void Remove(string character) 
    { 
     if (row1List.Contains(character)) 
     { 
      row1List.Remove(character); 
     } 

     if (row2List.Contains(character)) 
     { 
      row2List.Remove(character); 
     } 

     if (row3List.Contains(character)) 
     { 
      row3List.Remove(character); 
     } 
    } 

    private void OutputToConsole() 
    { 
     Console.WriteLine("List 1: "); 
     row1List.OrderBy(o => o).ToList().ForEach((c) => Console.Write(c)); 
     Console.WriteLine(""); 


     Console.WriteLine("List 2: "); 
     row2List.OrderBy(o => o).ToList().ForEach((c) => Console.Write(c)); 
     Console.WriteLine(""); 


     Console.WriteLine("List 3: "); 
     row3List.OrderBy(o => o).ToList().ForEach((c) => Console.Write(c)); 
     Console.WriteLine(""); 
    } 
関連する問題