XAMLの一部の属性を列挙型でバインドしようとしています。 どのように動作するはずですか:メニューバーにラジオボタンがあり、その列挙値が設定されています。そして、この列挙値はにisEnabled
属性を設定します。したがって、radiobutton - >(EnumToBooleanConverter) - > enumオブジェクト - >(EnumToIsActiveCnoverter) - >isEnabled
というような関係があります。私はそのバインディングを実行するために2つのコンバータを書いています。 コード:WPFバインダで変換ができない
<Window.Resources>
<local:EnumToBooleanConverter x:Key="actionConverter" />
<local:EnumToIsActiveConverter x:Key="activityConverter" />
</Window.Resources>
...
<MenuItem Header="Settings">
<MenuItem Header="Action">
<MenuItem Header="Draw">
<MenuItem.Icon>
<RadioButton GroupName="MenuActionButton"
IsChecked="{Binding Path=appMode,
Converter={StaticResource actionConverter},
ConverterParameter={x:Static local:ApplicationMode.Draw}}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Edit">
<MenuItem.Icon>
<RadioButton GroupName="MenuActionButton"
IsChecked="{Binding Path=appMode,
Converter={StaticResource actionConverter},
ConverterParameter={x:Static local:ApplicationMode.Edit}}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Constraints">
<MenuItem.Icon>
<RadioButton GroupName="MenuActionButton"
IsChecked="{Binding Path=appMode,
Converter={StaticResource actionConverter},
ConverterParameter={x:Static local:ApplicationMode.Constraints}}"/>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</MenuItem>
CSファイル:指定されたパラメータに列挙値はラジオボタンがチェックされている
public partial class MainWindow : Window
{
public ApplicationMode appMode { get; set; }
public MainWindow()
{
this.appMode = ApplicationMode.Draw;
InitializeComponent();
}
}
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//return value.Equals(parameter);
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(true) ? parameter : Binding.DoNothing;
}
}
public class EnumToIsActiveConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//return value.Equals(true) ? parameter : Binding.DoNothing;
return Binding.DoNothing;
}
}
public enum ApplicationMode
{
Draw,
Edit,
Constraints
}
EnumToBooleanConverter
変更とEnumToIsActiveConverter
変化isEnabled
の属性が与えられましたenum値が指定されたパラメータに設定されている場合、 それはうまくいくはずです。私はここで何が欠けていますか?
これはまさに私がこれをした方法です! –
@ wis.niowyあなたは答えを受け入れる方法を知っていますか?ここを参照してくださいhttps://stackoverflow.com/help/someone-answers。あなたの質問履歴によれば、あなたはこれを行うことができるところでたくさんの質問をします。あなたは+2評判を得ています。 – dovid