【问题标题】:GetValue(NameProperty) returns "" although "x:Name" for UI element is set in XAML尽管在 XAML 中为 UI 元素设置了“x:Name”,但 GetValue(NameProperty) 返回“”
【发布时间】:2014-08-27 17:52:03
【问题描述】:

我正在尝试实现这个https://stackoverflow.com/a/3754004/1805329

我的问题是

(string)column.GetValue(NameProperty)

虽然我确实为网格中的每一列设置了名称,但返回 ""。

<fw:DataGridEx x:Name="LogGrid"
                               Visibility="Visible"
                               DockPanel.Dock="Top"
                               VerticalScrollBarVisibility="Auto"
                               SelectionMode="Single"
                               SelectionUnit="FullRow"
                               IsReadOnly="True"
                               AlternatingRowBackground ="Gainsboro"
                               AlternationCount="2"
                               ItemsSource="{Binding Path=LogView, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                               SelectedItem="{Binding Path=LogItem, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                               HiddenColumns="{Binding LogHiddenColumns}"
                               AutoGenerateColumns="False">
                    <i:Interaction.Behaviors>
                        <fw:ScrollIntoViewBehavior/>
                    </i:Interaction.Behaviors>
                    <DataGrid.Columns>
                        <DataGridTextColumn x:Name="logColumnTime"
                                            Header="Time"
                                            Binding="{Binding Time}" />
                        <DataGridTextColumn x:Name="logColumnDirection"
                                            Header="Direction"
                                            Binding="{Binding Direction}" />
                        <DataGridTextColumn x:Name="logColumnData"
                                            Header="Data"
                                            Binding="{Binding Data}" />
                        <DataGridTextColumn x:Name="logColumnSpecifics"
                                            Header="Specifics"
                                            Binding="{Binding Specifics}" />
                        <DataGridTextColumn x:Name="logColumnOverheadData"
                                            Header="Overhead Data"
                                            Binding="{Binding OverheadData}" />
                        <DataGridTextColumn x:Name="logColumnOverheadSpecifics"
                                            Header="Overhead Specifics"
                                            Binding="{Binding OverheadSpecifics}" />
                    </DataGrid.Columns>
                </fw:DataGridEx>

当我为列设置名称时

columns[0].SetValue(NameProperty, "Time");

GetValue(NameProperty) 方法返回正确的值。我显然不想这样做,因为它违反了 MVVM 模式。我这样做只是为了调试。

有谁知道为什么它不能识别 XAML 中定义的名称?

【问题讨论】:

    标签: c# xaml mvvm binding


    【解决方案1】:

    我找到了解决问题的方法。还请阅读最初的问题并检查我提到我正在尝试实施的链接。

    DataGridTextColumn 没有名称属性。 http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtextcolumn_properties(v=vs.110).aspx

    您必须通过实现自己的 DataGridTextColumn 添加一个。

    public class DataGridTextColumnEx : DataGridTextColumn
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                if (value != _name)
                {
                    _name = value;
                    NotifyPropertyChanged("Name");
                }
            }
        }
    }
    

    DataGridEx 实现的变化

    foreach (DataGridTextColumnEx column in dg.Columns)
            {
                if (hiddenColumns.Contains((string)column.Name))
                    column.Visibility = Visibility.Collapsed;
                else
                    column.Visibility = Visibility.Visible;
            }
    

    XAML 列条目发生变化

    <fw:DataGridTextColumnEx Name="logColumnTime"
                             Header="Time"
                             Binding="{Binding Time}" />
    

    【讨论】:

      猜你喜欢
      • 2022-08-17
      • 1970-01-01
      • 2014-02-26
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 2021-01-18
      • 2021-03-18
      相关资源
      最近更新 更多