2016-06-22 18 views
-2

ToggleButtonsのペアをバインドしようとしています。そのため、一方がチェックされているときにもう一方がチェックされます。WPF Programaticllyバインディング双方向

ToggleButton two = new ToggleButton(); 
/* Set up ToggleButton here*/ 
ToggleButton one = this.somePanel.Children.FirstOrDefault(/*Some Condition*/) as ToggleButton 
if (one == null) return; 
Binding binding = new Binding("IsChecked"); 
binding.Source = two; 
binding.Mode = BindingMode.TwoWay; 
one.SetBinding(ToggleButton.IsCheckedProperty, binding); 
/* Add two to the UI */ 

私がボタン1をトグルすると、ボタン2はトグルしますが、ボタン2をトグルするとボタン1はトグルしません。

+3

コードでバインディングを作成しないでください、それはめちゃくちゃです。 –

+0

通常のトグルボタンとは逆のボタンをトグルしたいのですか?同じように一対のボタンが必要なのはなぜですか? – Paparazzi

+0

@パパラッチこれはサーバー上の同じオブジェクトを表しますが、別のメニューの – KevinA

答えて

0

あなたのViewModelの同じプロパティに両方のボタンのIsCheckedプロパティをバインドすることができます。 MainWindow.xaml

MainViewModel.cs
<ToggleButton Grid.Row="1" 
        Grid.Column="0" 
        Width="60" 
        Height="30" 
        Content="Button 1" 
        IsChecked="{Binding IsToggleButtonChecked}" /> 
    <ToggleButton Grid.Row="1" 
        Grid.Column="1" 
        Width="60" 
        Height="30" 
        Content="Button 2" 
        IsChecked="{Binding IsToggleButtonChecked}" /> 

(あなたがMVVM Lightを使用することができることを仮定して):

private bool _isToggleButtonChecked = false; 
    public bool IsToggleButtonChecked 
    { 
     get { return _isToggleButtonChecked; } 
     set { Set<bool>(ref _isToggleButtonChecked, value); } 
    } 
-1

あなたのコードに問題はないと思います。それは私の最後に完璧に動作するようだ。私は、xamlとcodebehindの両方で、コードの中で完全に後ろで試してみました。

期待どおりに動作し、バインドが完璧です!

以下のサンプルを含めました。それを確認してください。結束は私の最後で完璧です!

XAML:背後に

<Window x:Class="WpfApplication1.MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:local="clr-namespace:WpfApplication1" 
xmlns:viewModel="clr-namespace:WpfApplication1.ViewModel" 
mc:Ignorable="d" 
Title="MainWindow" Height="350" Width="525" 
> 
<Grid x:Name="Grid1" /> 
</Window> 

コード:

using System.Windows; 
using System.Windows.Controls.Primitives; 
using System.Windows.Data; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      ToggleButton two = new ToggleButton(); 
      two.Content = "Two"; 
      two.Width = 100; 
      two.Height = 50; 

      /* Set up ToggleButton here*/ 

      this.Grid1.Children.Add(two); 

      ToggleButton one = new ToggleButton(); 
      if (one == null) return; 
      one.Content = "One"; 
      one.Width = 100; 
      one.Height = 50; 
      one.Margin = new Thickness(0, 0, 250, 0); 

      this.Grid1.Children.Add(one); 

      Binding binding = new Binding("IsChecked"); 
      binding.Source = two; 
      binding.Mode = BindingMode.TwoWay; 
      one.SetBinding(ToggleButton.IsCheckedProperty, binding); 
      /* Add two to the UI */ 
     } 
    } 
} 
関連する問題