Xaml 如何访问Telerik';从UWP的代码隐藏中删除RadDataGrid单元格内容?

Xaml 如何访问Telerik';从UWP的代码隐藏中删除RadDataGrid单元格内容?,xaml,binding,uwp,telerik,grid,Xaml,Binding,Uwp,Telerik,Grid,我们的网格使用DataGridTemplateColumn在每列下显示texbox。我们有一个要求,使文本框只读,如果它包含任何数据(数据加载情况)。为了实现这一点,我们需要访问radgrid下的所有文本框控件。到目前为止,我们已经尝试了以下方法 使用VisualTreeHelper查找所有子控件-未找到文本框控件 已尝试使用DataBindingComplete事件 是否有任何方法可以从RadDataGrid的codebehind访问底层单元的控件 另一种方法:我们是否可以使用带有一些绑定

我们的网格使用DataGridTemplateColumn在每列下显示texbox。我们有一个要求,使文本框只读,如果它包含任何数据(数据加载情况)。为了实现这一点,我们需要访问radgrid下的所有文本框控件。到目前为止,我们已经尝试了以下方法

  • 使用VisualTreeHelper查找所有子控件-未找到文本框控件
  • 已尝试使用DataBindingComplete事件
是否有任何方法可以从RadDataGrid的codebehind访问底层单元的控件

另一种方法:我们是否可以使用带有一些绑定的IsReadOnly属性来检查它的值,并在有值时使控件成为只读

我们是否可以使用带有一些绑定的IsReadOnly属性来检查它的值,并在有值时使控件成为只读

对。您当然可以通过使用绑定来实现这一点。您只需要定义一个bool属性并将TextBox的IsReadOnly属性绑定到此属性。然后,您可以根据TextBox的文本更改此布尔值

请参考我的以下代码示例:

<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>

公共密封部分类主页面:第页
{
ObservableCollection列表=新的ObservableCollection();
公共主页()
{
this.InitializeComponent();
添加(新数据{Country=“阿根廷”,Flag=“A”});
添加(新数据{Country=string.Empty,Flag=“B”});
添加(新数据{Country=“China”,Flag=“C”});
this.grid.ItemsSource=列表;
this.Loaded+=主页面_Loaded;
}
已加载专用异步void主页(对象发送方、路由目标)
{
等待任务。延迟(5000);
列表[1]。国家=“巴西”;
}
}
公共类数据:INotifyPropertyChanged
{
私人字符串(国家),;
公共字符串国家
{
获取{return\u Country;}
设置
{
_国家=价值;
if(string.IsNullOrEmpty(value))
{
IsReadOnly=true;
}
其他的
{
IsReadOnly=false;
}
RaiseProperty变更(“国家”);
}
}
私有字符串_标志;
公共字符串标志
{
获取{return\u Flag;}
设置
{
_标志=值;
升起财产变更(“旗帜”);
}
}
private bool\u IsReadOnly=false;
公共图书馆是只读的
{
获取{return\u IsReadOnly;}
设置
{
_IsReadOnly=值;
RaisePropertyChanged(“IsReadOnly”);
}
}
公共事件属性更改事件处理程序属性更改;
私有void RaisePropertyChanged(字符串PropertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(PropertyName));
}
}
}

恐怕您的解决方案不适用于我的案例。下面是我在运行代码片段后得到的屏幕截图:尽管第一行和最后一行的文本框包含文本(在前几秒钟),但文本框是可编辑的。我想让这两个textbosex成为只读的。其他文本框将处于可编辑状态。p、 我正在使用json的动态绑定。我没有任何用于绑定的特定模型。因此,我认为如果我能以任何方式访问控件,那将是最好的。p、 s.1:谢谢你的代码片段:)@user1814131我只是给你一个简单的代码示例,告诉你如何通过绑定动态设置IsReadOnly。如果要使这两个文本框在包含文本时为只读。您只需在
Country
属性的
if/else
块中更改代码逻辑即可。