【问题标题】:Binding a DataTemplate button IsEnabled to the itemssource element将 DataTemplate 按钮 IsEnabled 绑定到 itemssource 元素
【发布时间】:2015-02-26 01:19:23
【问题描述】:

我有以下情况,(用实际代码更新了我的表示)

数据类为,

public class X : INotifyPropertyChanged
    {
        public decimal patientID { get; set; }
        public decimal medicationID { get; set; }
        public decimal documentID { get; set; }
        public decimal prescriptionID { get; set; }
        public string prescriptionOrderNumber { get; set; }
        public string patientName { get; set; }
        public string medicationName { get; set; }
        public string medicationQuantity { get; set; }
        public string medicationInstructions { get; set; }
        public string authorizingProvider { get; set; }
        public string stateName  { get; set; }
        public bool prescriptionPrinted {get; set; }

        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
    }
}

VM class has an observable collection property as,

 private ObservableCollection<X> _items = new ObservableCollection<X>();

        public ObservableCollection<X> items 
        { 
            get { return _items; }
        }


view
----
   <UserControl.DataContext>
        <viewModel:VM/>
    </UserControl.DataContext>

    <ListView Grid.Row="1" Margin="10" Name="epcslist" SelectionMode="Single" ItemsSource="{Binding items}"  >
            <ListView.View>
                 <GridView>
                    <GridViewColumn  Width="30">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button Name="btnPrintPrescription"  Content=" P "  ToolTip="Print prescription" 
                                        IsEnabled="{Binding Path=prescriptionPrinted}"
                                        Command="{Binding DataContext.PrintPrescriptionCommand, RelativeSource={RelativeSource AncestorType=ListView}}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

                    <GridViewColumn  Width="30">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button Name="btnOpenPatientChart" Content=" O " ToolTip="Open patient's chart"
                                        Command="{Binding DataContext.OpenPatientChartCommand, RelativeSource={RelativeSource AncestorType=ListView}}">
                                </Button>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Width="120" DisplayMemberBinding="{Binding patientName}" >
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Patient" Click="EpcslistColumnHeader_Click">Patient</GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>
                    <GridViewColumn Width="150" DisplayMemberBinding="{Binding medicationName}" >
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Medication" Click="EpcslistColumnHeader_Click">Medication</GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>
                    <GridViewColumn Width="50" DisplayMemberBinding="{Binding medicationQuantity}" >
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Qty" Click="EpcslistColumnHeader_Click">Qty</GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>
                    <GridViewColumn Width="120" DisplayMemberBinding="{Binding medicationInstructions}" >
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Instructions" Click="EpcslistColumnHeader_Click">Instructions</GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>
                    <GridViewColumn Width="120" DisplayMemberBinding="{Binding authorizingProvider}" >
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Provider" Click="EpcslistColumnHeader_Click">Authorizing Provider</GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>

我正在尝试将按钮的 IsEnabled 绑定到源的处方打印,但它不起作用。我需要帮助来绑定它,以便在基于 bool 值加载列表视图时,我需要在将项目加载到列表视图时启用或禁用按钮。

非常感谢任何帮助。

谢谢, ub.

【问题讨论】:

  • 我试过了, 但我仍然没有看到预期的行为,有什么想法我做错了吗?

标签: wpf button binding datatemplate isenabled


【解决方案1】:

首先绑定属性必须是Property 而不是Field 所以你应该把你的代码像这样 XAML

<ListView ItemsSource="{Binding}">
    <ListView.View>
        <GridView>
            <GridViewColumn >
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="P" IsEnabled="{Binding Element3 }"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn DisplayMemberBinding="{Binding Element1}" />
            <GridViewColumn DisplayMemberBinding="{Binding Element2}" />
        </GridView>
    </ListView.View>
</ListView>

CS

public class Source
{
    public string Element1
    { get; set; }
    public string Element2
    { get; set; }
    public bool Element3
    { get; set; }
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    List<Source> Items = new List<Source>();
    Items.Add(new Source() { Element1 = "Name11", Element2 = "Name12", Element3 = false });
    Items.Add(new Source() { Element1 = "Name21", Element2 = "Name22", Element3 = true });
    Items.Add(new Source() { Element1 = "Name31", Element2 = "Name32", Element3 = true });
    Items.Add(new Source() { Element1 = "Name41", Element2 = "Name42", Element3 = false });

    this.DataContext = Items;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2011-05-09
    • 2011-08-26
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多