は、私たちいくつかの結合で何とかユーザー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));
}
}
}
私はあなたのソリューションは、私の場合のために働かなかったことを恐れています。 [link](https://ibb.co/jtPnfG) 最初と最後の行のテキストボックスにテキストが含まれていても(最初の数秒間)、テキストボックス編集可能です。私が欲しいのは、これらの2つのテキストボーズを読み取り専用にすることです。他のテキストボックスは編集可能です。 p.s.私はjsonから動的バインディングを使用しています。私は束縛のために使用される特定のモデルを持っていません。だから私はどのようにコントロールにアクセスすることができれば最高だと思う。 p.s.1:コードスニペットありがとうございました:) – user1814131
@ user1814131簡単なコードサンプルを提供して、バインディングによって動的にIsReadOnlyを設定する方法を説明します。これらの2つのテキストボックスに、テキストが含まれているときに読み取り専用にしたい場合。 'Country'プロパティの' if/else'ブロックのコードロジックを変更するだけです。 –