C# 如何绑定到XAML中的radiobutton selected属性

C# 如何绑定到XAML中的radiobutton selected属性,c#,wpf,xaml,data-binding,radio-button,C#,Wpf,Xaml,Data Binding,Radio Button,使用visual studio 2015社区和.NET 4.5 我有一个特定于我的应用程序用户的单选按钮动态列表。当用户使用web服务进行身份验证时,将动态创建按钮列表。该列表存储在ObservableCollection中。我已经将它绑定到XAML,它正确地呈现,并且在选择后正确地存储isSelected 我想做的是在用户选择服务类型(单击单选按钮)时有一个事件触发器。我读过很多例子,但它们都是硬编码单选按钮,但在我的例子中,我需要按钮是动态的 如何将XAML中的按钮单击绑定到ViewMode

使用visual studio 2015社区和.NET 4.5

我有一个特定于我的应用程序用户的单选按钮动态列表。当用户使用web服务进行身份验证时,将动态创建按钮列表。该列表存储在ObservableCollection中。我已经将它绑定到XAML,它正确地呈现,并且在选择后正确地存储isSelected

我想做的是在用户选择服务类型(单击单选按钮)时有一个事件触发器。我读过很多例子,但它们都是硬编码单选按钮,但在我的例子中,我需要按钮是动态的

如何将XAML中的按钮单击绑定到ViewModel

服务成本

public class ServiceCost
{
    public long pst_id { get; set; }
    public string pst_description_short { get; set; }
    public decimal pst_cost { get; set; }
    private bool _isSelected;
    public bool IsSelected
    {
        get { return _isSelected; }
        set{if (value != _isSelected) { _isSelected = value; } }
    }
    public string DescriptionPrice
    {
        get
        {
            return string.Format(Strings.ServiceCost_DescriptionPrice, this.pst_description_short, pst_cost.ToString());
        } 
    }
 ...
xaml:

。。。
...
视图模型:

    ...
    private ObservableCollection<ServiceCost> _serviceTypes;
    public ObservableCollection<ServiceCost> ServiceTypes
    {
        get { return _serviceTypes; }
        set
        {
            if (_serviceTypes != value)
            {
                _serviceTypes = value;
                DynamicOnPropertyChanged();
            }
        }
    }
    ...
。。。
私有可观察收集服务类型;
公共可观测收集服务类型
{
获取{return\u serviceTypes;}
设置
{
if(_serviceTypes!=值)
{
_服务类型=值;
DynamicPropertyChanged();
}
}
}
...

如果我正确理解了您的问题,您只想在XAML中执行此操作。如果是这样,使用
EventTrigger
是一种方法

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <RadioButton Margin="2,3.5"
                     Content="{Binding Path=DescriptionPrice}"
                     GroupName="ServiceType"
                     IsChecked="{Binding Path=IsSelected}">
            <RadioButton.Triggers>
                <EventTrigger RoutedEvent="ToggleButton.Checked">
                </EventTrigger>
            </RadioButton.Triggers>
        </RadioButton>
    </DataTemplate>
</ItemsControl.ItemTemplate>


请注意,RadioButton的
Checked
事件可通过其基类
ToggleButton
访问。如果您需要在此事件中调用代码,您可以尝试。

如果我正确理解您的问题,您只需要在XAML中执行此操作。如果是这样,使用
EventTrigger
是一种方法

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <RadioButton Margin="2,3.5"
                     Content="{Binding Path=DescriptionPrice}"
                     GroupName="ServiceType"
                     IsChecked="{Binding Path=IsSelected}">
            <RadioButton.Triggers>
                <EventTrigger RoutedEvent="ToggleButton.Checked">
                </EventTrigger>
            </RadioButton.Triggers>
        </RadioButton>
    </DataTemplate>
</ItemsControl.ItemTemplate>


请注意,RadioButton的
Checked
事件可通过其基类
ToggleButton
访问。如果需要调用此事件的代码,可以尝试。

我遇到的问题是单击单选按钮后访问viewModel。经过大量搜索,我发现ListBox是一种包装单选按钮的方式,它有一个selectedItem,然后我可以将ListBox的selectedItem绑定到我的ViewModel并访问该变量。我不知道这是否是让它工作的最佳方式,但它确实对我有用

ServiceCost.cs=未更改

xaml:

。。。
...
viewModel:

    ...
    private ObservableCollection<ServiceCost> _serviceCosts;
    public ObservableCollection<ServiceCost> ServiceCosts
    {
        get { return _serviceCosts; }
        set { if (_serviceCosts != value){_serviceCosts = value;    DynamicOnPropertyChanged();}}
    }

    private ServiceCost _selectedServiceCost;
    public ServiceCost SelectedServiceCost
    {
        get { return _selectedServiceCost; }
        set
        { 
            if (_selectedServiceCost != value)
            {
                // This is what I needed access to:  do something here!.
                _selectedServiceCost = value;
                DynamicOnPropertyChanged(); 
            }
        }
    }
    ...
。。。
私人可观测收款服务成本;
公共可观测收集服务成本
{
获取{return\u serviceCosts;}
设置{if(_serviceCosts!=value){u serviceCosts=value;DynamicOnPropertyChanged();}}
}
私人服务成本_选择的服务成本;
公共服务成本选择服务成本
{
获取{return\u selectedServiceCost;}
设置
{ 
如果(_selectedServiceCost!=值)
{
//这就是我需要访问的:在这里做点什么!。
_selectedServiceCost=价值;
DynamicPropertyChanged();
}
}
}
...

我遇到的问题是单击单选按钮后访问viewModel。经过大量搜索,我发现ListBox是一种包装单选按钮的方式,它有一个selectedItem,然后我可以将ListBox的selectedItem绑定到我的ViewModel并访问该变量。我不知道这是否是让它工作的最佳方式,但它确实对我有用

ServiceCost.cs=未更改

xaml:

。。。
...
viewModel:

    ...
    private ObservableCollection<ServiceCost> _serviceCosts;
    public ObservableCollection<ServiceCost> ServiceCosts
    {
        get { return _serviceCosts; }
        set { if (_serviceCosts != value){_serviceCosts = value;    DynamicOnPropertyChanged();}}
    }

    private ServiceCost _selectedServiceCost;
    public ServiceCost SelectedServiceCost
    {
        get { return _selectedServiceCost; }
        set
        { 
            if (_selectedServiceCost != value)
            {
                // This is what I needed access to:  do something here!.
                _selectedServiceCost = value;
                DynamicOnPropertyChanged(); 
            }
        }
    }
    ...
。。。
私人可观测收款服务成本;
公共可观测收集服务成本
{
获取{return\u serviceCosts;}
设置{if(_serviceCosts!=value){u serviceCosts=value;DynamicOnPropertyChanged();}}
}
私人服务成本_选择的服务成本;
公共服务成本选择服务成本
{
获取{return\u selectedServiceCost;}
设置
{ 
如果(_selectedServiceCost!=值)
{
//这就是我需要访问的:在这里做点什么!。
_selectedServiceCost=价值;
DynamicPropertyChanged();
}
}
}
...

感谢您的帮助,但是如果没有更多的内容,我无法让事件触发器在我的代码中工作,至少我无法使它们绑定到viewmodel,也无法将事件触发器绑定到serviceCost类,但这没有帮助。当我试图安装这些外部引用时,示例enc.做了一些事情破坏了我的项目,但我不知道它在哪里破坏了…也许这会更有用:谢谢你的帮助,但如果没有更多的帮助,我无法让事件触发器在我的代码中工作,至少我无法使它们绑定到viewmodel,服务成本类的工作,但这没有帮助。当我试图安装这些外部引用时,示例enc.做了一些事情破坏了我的项目,我