作为示例,请使用以下代码:
public enum ExampleEnum { FooBar, BarFoo }
public class ExampleClass : INotifyPropertyChanged
{
private ExampleEnum example;
public ExampleEnum ExampleProperty
{ get { return example; } { /* set and notify */; } }
}
Run Code Online (Sandbox Code Playgroud)
我想要将属性ExampleProperty数据绑定到ComboBox,以便它显示选项"FooBar"和"BarFoo"并在TwoWay模式下工作.最理想的是我希望我的ComboBox定义看起来像这样:
<ComboBox ItemsSource="What goes here?" SelectedItem="{Binding Path=ExampleProperty}" />
Run Code Online (Sandbox Code Playgroud)
目前我在我的Window中安装了ComboBox.SelectionChanged和ExampleClass.PropertyChanged事件的处理程序,我手动执行绑定.
是否有更好或某种规范的方式?您通常会使用转换器吗?如何使用正确的值填充ComboBox?我现在甚至不想开始使用i18n.
编辑
所以回答了一个问题:如何使用正确的值填充ComboBox.
通过静态Enum.GetValues方法中的ObjectDataProvider将Enum值作为字符串列表检索:
<Window.Resources>
<ObjectDataProvider MethodName="GetValues"
ObjectType="{x:Type sys:Enum}"
x:Key="ExampleEnumValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="ExampleEnum" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
这个我可以用作我的ComboBox的ItemsSource:
<ComboBox ItemsSource="{Binding Source={StaticResource ExampleEnumValues}}"/>
Run Code Online (Sandbox Code Playgroud) 我有一组按钮,它们应该像切换按钮一样,但也可以作为单选按钮,在当前时间只能选择/按下一个按钮.它还需要具有不选择/按下任何按钮的状态.
行为将有点像Photoshop工具栏,其中零或一个工具随时被选中!
知道如何在WPF中实现这一点吗?
对于值1,2或3,将一组3个radiobuttons绑定到int类型属性的最简单方法是什么?
是否可以使用ObjectDataProvider方法将ListBox绑定到枚举,并以某种方式设置样式以显示描述attriibute?如果是这样,怎么会这样做...?
什么是local:在XAML中,可以调用C#类中的哪些参数local:?
在我看到的一些代码中,我看到了xmlns:local="clr-namespace:AskLocal".这是什么意思?
我以前把枚举绑定到单选按钮,我一般都明白它是如何工作的.我使用了这个问题的替代实现:如何将RadioButtons绑定到枚举?
我想生成一个自定义类型的运行时枚举集,而不是枚举,而是将它们作为一组单选按钮呈现.我已经得到了一个视图,它使用一个运行时枚举的集合ListView,并绑定到ItemsSource和SelectedItem属性,因此我ViewModel可以正确连接.现在我正试图从a切换ListView到a ItemsControl与单选按钮.
就我而言:
<Window.Resources>
<vm:InstanceToBooleanConverter x:Key="InstanceToBooleanConverter" />
</Window.Resources>
<!-- ... -->
<ItemsControl ItemsSource="{Binding ItemSelections}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:ISomeType}">
<RadioButton Content="{Binding Name}"
IsChecked="{Binding Path=SelectedItem, Converter={StaticResource InstanceToBooleanConverter}, ConverterParameter={Binding}}"
Grid.Column="0" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
InstanceToBooleanConverter具有与EnumToBooleanConverter其他问题相同的实现.这似乎是正确的,因为它似乎只是调用Equals方法:
public class InstanceToBooleanConverter : 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) …Run Code Online (Sandbox Code Playgroud) 让我们想象我有:
<RadioButton GroupName="Group1" IsChecked="{Binding Path=RadioButton1IsChecked}" />
<RadioButton GroupName="Group1" IsChecked="{Binding Path=RadioButton2IsChecked}" />
Run Code Online (Sandbox Code Playgroud)
然后在我的数据源类中,我有:
public bool RadioButton1IsChecked { get; set; }
public bool RadioButton2IsChecked { get; set; }
public enum RadioButtons { RadioButton1, RadioButton2, None }
public RadioButtons SelectedRadioButton
{
get
{
if (this.RadioButtonIsChecked)
return RadioButtons.RadioButton1;
else if (this.RadioButtonIsChecked)
return RadioButtons.RadioButton2;
else
return RadioButtons.None;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式将我的单选按钮直接绑定到SelectedRadioButton属性吗?我真的只需要RadioButton1IsChecked和RadioButton2IsChecked属性来计算选定的单选按钮.
我在MVVM WPF应用程序中有一个TabControl .它的定义如下.
<TabControl Style="{StaticResource PortfolioSelectionTabControl}" SelectedItem="{Binding SelectedParameterTab}" >
<TabItem Header="Trades" Style="{StaticResource PortfolioSelectionTabItem}">
<ContentControl Margin="0,10,0,5" Name="NSDetailTradeRegion" cal:RegionManager.RegionName="NSDetailTradeRegion" />
</TabItem>
<TabItem Header="Ccy Rates" Style="{StaticResource PortfolioSelectionTabItem}">
<ContentControl Margin="0,10,0,5" Name="NSDetailCcyRegion" cal:RegionManager.RegionName="NSDetailCcyRegion" />
</TabItem>
<TabItem Header="Correlations / Shocks" Style="{StaticResource PortfolioSelectionTabItem}">
<ContentControl Name="NSDetailCorrelationRegion" cal:RegionManager.RegionName="NSDetailCorrelationRegion" />
</TabItem>
<TabItem Header="Facility Overrides" Style="{StaticResource PortfolioSelectionTabItem}" IsEnabled="False">
<ContentControl Name="NSDetailFacilityOverrides" cal:RegionManager.RegionName="NSDetailFacilityOverrides" />
</TabItem>
</TabControl>
Run Code Online (Sandbox Code Playgroud)
因此,每个标签项内容都有自己的视图与之关联.这些视图中的每一个都具有MEF [Export]属性,并通过视图发现与相关区域相关联,因此上面的代码就是我需要让标签控件加载并在它们之间切换.它们都引用了它们后面的相同共享ViewModel对象,因此所有对象都无缝地交互.
我的问题是,当用户导航到父窗口时,我希望选项卡控件默认为第二个选项卡项.通过IsSelected="True"在TabItem编号2 中的XAML 中指定,在首次加载窗口时这很容易做到.当用户离开屏幕然后返回到屏幕时,这样做不太容易.
我想SelectedItem={Binding SelectedTabItem}在tab控件上有一个属性,所以我可以在ViewModel中以编程方式设置所选的选项卡,但问题是我不知道ViewModel中的TabItem对象,因为它们仅在XAML中声明,所以我没有TabItem对象传递给setter属性.
我有一个想法是让子视图(形成上面每个标签项的内容)在他们的XAML的UserControl级别上有一个样式,如下所示.
<Style TargetType={x:Type UserControl}>
<Style.Triggers>
<DataTrigger Property="IsSelected" Value="True">
<Setter Property="{ElementName={FindAncestor, Parent, typeof(TabItem)}, …Run Code Online (Sandbox Code Playgroud) 对于喜欢WPF绑定挑战的人:
我有一个近乎功能的例子,双向绑定一个复选框到一个标志枚举的单个位(感谢Ian Oakes,原始的MSDN帖子).但问题是绑定的行为就好像它是一种方式(UI到DataContext,反之亦然).因此,复选框不会初始化,但如果切换,则数据源会正确更新.Attached是定义一些附加依赖项属性的类,以启用基于位的绑定.我注意到,即使我强制DataContext更改,也永远不会调用ValueChanged.
我尝试过的:更改属性定义的顺序,使用标签和文本框确认DataContext正在冒泡更新,任何合理的FrameworkMetadataPropertyOptions(AffectsRender,BindsTwoWayByDefault),显式设置绑定模式= TwoWay,敲打墙头,改变如果发生冲突,请将ValueProperty添加到EnumValueProperty.
任何建议或想法将非常感谢,感谢您提供的任何东西!
枚举:
[Flags]
public enum Department : byte
{
None = 0x00,
A = 0x01,
B = 0x02,
C = 0x04,
D = 0x08
} // end enum Department
Run Code Online (Sandbox Code Playgroud)
XAML用法:
CheckBox Name="studentIsInDeptACheckBox"
ctrl:CheckBoxFlagsBehaviour.Mask="{x:Static c:Department.A}"
ctrl:CheckBoxFlagsBehaviour.IsChecked="{Binding Path=IsChecked, RelativeSource={RelativeSource Self}}"
ctrl:CheckBoxFlagsBehaviour.Value="{Binding Department}"
Run Code Online (Sandbox Code Playgroud)
班级:
///
/// A helper class for providing bit-wise binding.
///
public class CheckBoxFlagsBehaviour
{
private static bool isValueChanging;
public static Enum GetMask(DependencyObject obj)
{
return (Enum)obj.GetValue(MaskProperty);
} // end GetMask
public static …Run Code Online (Sandbox Code Playgroud) 我正在尝试将枚举绑定到WPF中的单选按钮(受此答案的启发),但我无法找到转换器参数的枚举类型:
枚举按以下方式定义
namespace Application.Models
{
public class Enums
{
public enum MySelections { one, two ,three };
public MySelections CurrentSelection;
...
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试绑定这样的复选框(假设数据上下文是正确的并且实现了值转换器:)
<Window x:Class="Application.MainWindow"
....
xnlns:models="clr-namespace:Application.Models" >
...
<RadioButton Content="One"
IsChecked="{Binding Path=CurrentSelection, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static models:Enums.MySelections.one}}" />
...
Run Code Online (Sandbox Code Playgroud)
问题在于{x:Static models:Enums.MySelections.one}不断抛出models:Enums.MySelections无法找到类型的错误.
我怎样才能找到我的枚举类型?
wpf ×10
enums ×3
radio-button ×3
binding ×2
c# ×2
data-binding ×2
mvvm ×2
.net ×1
.net-4.0 ×1
c#-4.0 ×1
listbox ×1
prism ×1
radio-group ×1
tabcontrol ×1
xaml ×1