2017-12-06 6 views
0

私たちはグリッドにDataGridTemplateColumnを使用して、各列の下にtexboxを表示しました。テキストボックスにデータが含まれている場合は、テキストボックスを読み取り専用にする必要があります(データ読み込みの場合)。これを達成するには、radgridの下にあるすべてのテキストボックスコントロールにアクセスする必要があります。いいえテキストボックスコントロールがから基本となるセルのコントロールにアクセスする方法はあり UWPのコードビハインドからTelerikのRadDataGridセルコンテンツにアクセスするには?

  • がDataBindingCompleteイベント
  • にしようとしました見つからなかった - 私たちは、これまで

    • VisualTreeHelperを使用して、すべての子コントロールを探す、次のアプローチを試してみましたRadDataGridのコードビハインド?

      代替アプローチ:何らかのバインディングを使用してIsReadOnlyプロパティを使用して値をチェックし、値が存在するときにコントロールを読み取り専用にすることはできますか?値があるとき

    答えて

    1

    は、私たちいくつかの結合で何とかユーザーIsReadOnlyプロパティは、それが価値だチェックし、読み取り専用コントロールを作ることはできますか?

    はい。確かにBindingを使ってこれを達成することができます。 boolプロパティを定義し、TextBoxのIsReadOnlyプロパティをこのプロパティにバインドするだけです。次に、TextBoxのテキストに従ってこのbool値を変更することができます。

    参照のための私の次のコードサンプルを参照してください:

    <telerikGrid:RadDataGrid x:Name="grid" AutoGenerateColumns="False" VerticalAlignment="Center"> 
         <telerikGrid:RadDataGrid.Columns> 
          <telerikGrid:DataGridTemplateColumn Header="Country"> 
           <telerikGrid:DataGridTemplateColumn.CellContentTemplate> 
            <DataTemplate> 
             <TextBox Text="{Binding Country}" HorizontalAlignment="Center" VerticalAlignment="Center" IsReadOnly="{Binding IsReadOnly}"/> 
            </DataTemplate> 
           </telerikGrid:DataGridTemplateColumn.CellContentTemplate> 
          </telerikGrid:DataGridTemplateColumn> 
    
          <telerikGrid:DataGridTemplateColumn Header="Flag"> 
           <telerikGrid:DataGridTemplateColumn.CellContentTemplate> 
            <DataTemplate> 
             <StackPanel> 
              <TextBlock Text="{Binding Flag}" /> 
             </StackPanel> 
            </DataTemplate> 
           </telerikGrid:DataGridTemplateColumn.CellContentTemplate> 
          </telerikGrid:DataGridTemplateColumn> 
         </telerikGrid:RadDataGrid.Columns> 
    </telerikGrid:RadDataGrid> 
    
    public sealed partial class MainPage : Page 
    { 
        ObservableCollection<Data> list = new ObservableCollection<Data>(); 
        public MainPage() 
        { 
         this.InitializeComponent(); 
    
         list.Add(new Data { Country = "Argentina",Flag="A"}); 
         list.Add(new Data {Country=string.Empty,Flag="B"}); 
         list.Add(new Data { Country = "China",Flag="C"}); 
         this.grid.ItemsSource = list; 
         this.Loaded += MainPage_Loaded; 
        } 
    
        private async void MainPage_Loaded(object sender, RoutedEventArgs e) 
        { 
         await Task.Delay(5000); 
         list[1].Country = "Brazil"; 
        } 
    } 
    
    public class Data:INotifyPropertyChanged 
    { 
        private string _Country; 
        public string Country 
        { 
         get { return _Country; } 
         set 
         { 
          _Country = value; 
          if (string.IsNullOrEmpty(value)) 
          { 
           IsReadOnly = true; 
          } 
          else 
          { 
           IsReadOnly = false; 
          } 
          RaisePropertyChanged("Country"); 
         } 
        } 
    
        private string _Flag; 
        public string Flag 
        { 
         get { return _Flag;} 
         set 
         { 
          _Flag = value; 
          RaisePropertyChanged("Flag"); 
         } 
        } 
    
        private bool _IsReadOnly=false; 
        public bool IsReadOnly 
        { 
         get { return _IsReadOnly; } 
         set 
         { 
          _IsReadOnly = value; 
          RaisePropertyChanged("IsReadOnly"); 
         } 
        } 
    
        public event PropertyChangedEventHandler PropertyChanged; 
    
        private void RaisePropertyChanged(string PropertyName) 
        { 
         if (PropertyChanged != null) 
         { 
          PropertyChanged(this,new PropertyChangedEventArgs(PropertyName)); 
         } 
        } 
    } 
    
    +0

    私はあなたのソリューションは、私の場合のために働かなかったことを恐れています。 [link](https://ibb.co/jtPnfG) 最初と最後の行のテキストボックスにテキストが含まれていても(最初の数秒間)、テキストボックス編集可能です。私が欲しいのは、これらの2つのテキストボーズを読み取り専用にすることです。他のテキストボックスは編集可能です。 p.s.私はjsonから動的バインディングを使用しています。私は束縛のために使用される特定のモデルを持っていません。だから私はどのようにコントロールにアクセスすることができれば最高だと思う。 p.s.1:コードスニペットありがとうございました:) – user1814131

    +0

    @ user1814131簡単なコードサンプルを提供して、バインディングによって動的にIsReadOnlyを設定する方法を説明します。これらの2つのテキストボックスに、テキストが含まれているときに読み取り専用にしたい場合。 'Country'プロパティの' if/else'ブロックのコードロジックを変更するだけです。 –

    関連する問題