我有以下XAML:
<Grid>
<Grid.RowDefinitions>
...
</Grid.RowDefinitions>
<DataGrid Grid.Row="0" ...>
<DataGrid.Columns>
...
</DataGrid.Columns>
</DataGrid>
<DockPanel Grid.Row="2">
<CheckBox x:Name="DisplayMarkers" DockPanel.Dock="Top" Content="Display Data Points?"
Margin="8,5,0,5" d:LayoutOverrides="Height" HorizontalAlignment="Left" IsChecked="False" />
<vf:Chart DockPanel.Dock="Top" ScrollingEnabled="False" ZoomingEnabled="True" ToolBarEnabled="True">
<vf:DataSeries AxisYType="Secondary" RenderAs="Line" DataSource="{Binding CdTeRoughnessList}"
XValueType="DateTime"
MarkerEnabled="{Binding ElementName=DisplayMarkers, Path=IsChecked}" Color="Navy"
LegendText="Roughness Std. Dev.">
Run Code Online (Sandbox Code Playgroud)
此绑定失败: MarkerEnabled="{Binding ElementName=DisplayMarkers, Path=IsChecked}"
我正在尝试绑定到我的Checkbox上名为'DisplayMarkers'的IsChecked属性.当我运行它时,在VS 2010的调试模式下,输出窗口显示绑定失败.它找不到名为'Checkbox'的元素谁能告诉我为什么?
我从VS得到的错误是:
System.Windows.Data Error: 4 : Cannot find source for binding with reference
'ElementName=DisplayMarkers'. BindingExpression:Path=IsChecked; DataItem=null; target element is 'DataSeries' (Name=''); target property is 'MarkerEnabled' (type 'Nullable`1')
Run Code Online (Sandbox Code Playgroud) 我收到此错误:
Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1''
Run Code Online (Sandbox Code Playgroud)
在这个绑定:
<DataGridTemplateColumn Visibility="{Binding DataContext.IsVisible, RelativeSource={RelativeSource AncestorType={x:Type UserControl}},Converter={StaticResource BooleanToVisibilityConverter}}">
Run Code Online (Sandbox Code Playgroud)
ViewModel作为DataContext在UserControl中.DataGrid的DataContext(坐在UserControl中)是ViewModel中的属性,在ViewModel中我有一个变量,表示是否显示某一行,其绑定失败,为什么?
我的财产:
private bool _isVisible=false;
public bool IsVisible
{
get { return _isVisible; }
set
{
_isVisible= value;
NotifyPropertyChanged("IsVisible");
}
}
Run Code Online (Sandbox Code Playgroud)
当涉及到函数时:NotifyPropertyChanged PropertyChanged事件为null - 意味着他未能注册绑定.
应该注意的是,我有更多绑定到ViewModel的方式,这是一个例子:
Command="{Binding DataContext.Cmd, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
Run Code Online (Sandbox Code Playgroud) 我有类似以下帖子的问题:
Silverlight DataGridTextColumn绑定可见性
我需要根据ViewModel中的值对Silverlight DataGrid中的列进行可见/折叠.为此,我尝试将Visibility属性绑定到ViewModel.但是我很快发现Visibility属性不是DependencyProperty,因此无法绑定.
为了解决这个问题,我尝试将自己的DataGridTextColumn子类化.有了这个新的类,我创建了一个DependencyProperty,最终推动更改DataGridTextColumn.Visibility财产.如果我没有数据绑定,这很有效.在我数据绑定到新属性的那一刻,它失败了,带有AG_E_PARSER_BAD_PROPERTY_VALUE异常.
public class MyDataGridTextColumn : DataGridTextColumn
{
#region public Visibility MyVisibility
public static readonly DependencyProperty MyVisibilityProperty =
DependencyProperty.Register("MyVisibility", typeof(Visibility), typeof(MyDataGridTextColumn), new PropertyMetadata(Visibility.Visible, OnMyVisibilityPropertyChanged));
private static void OnMyVisibilityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var @this = d as MyDataGridTextColumn;
if (@this != null)
{
@this.OnMyVisibilityChanged((Visibility)e.OldValue, (Visibility)e.NewValue);
}
}
private void OnMyVisibilityChanged(Visibility oldValue, Visibility newValue)
{
Visibility = newValue;
}
public Visibility MyVisibility
{
get { return (Visibility)GetValue(MyVisibilityProperty); }
set { SetValue(MyVisibilityProperty, value); }
}
#endregion public Visibility …Run Code Online (Sandbox Code Playgroud) 我不能让{Binding Title}inHeaderTemplate出现。
这是连接到 BindingContext 的类:
class SensorGroup
{
public string Title { get; set; }
public IList<Sensor> Sensors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
XAML:
<ListView Header=""
ItemsSource="{Binding Sensors}">
<ListView.HeaderTemplate>
<DataTemplate>
<Grid>
<Label Text="{Binding Title}"/>
</Grid>
</DataTemplate>
</ListView.HeaderTemplate>
<ListView.ItemTemplate>
...
</ListView>
Run Code Online (Sandbox Code Playgroud)
如果我用 替换它<Label Text="Some static text"/>,文本就会出现。
我找到了这个相关的问题,它链接到另一个问题。但我无法让它发挥作用。我试过:
<ContentPage.Resources>
<Label x:Key="MyTitle"
Binding="{Title}"/>
</ContentPage.Resources>
...
<Grid>
<StaticResource ResourceKey="MyTitle"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误,说Title无法找到绑定。
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:son"
x:Class="son.SonWindow">
<Grid x:Name="myGrid">
<Grid.Tag>
<Label Content="{Binding ActualWidth, ElementName=myGrid}" />
</Grid.Tag>
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
就像上面的一个简单代码一样,但是绑定找不到Element myGrid.在运行时,错误显示在"输出"窗口中
"System.Windows.Data错误:4:无法找到与引用'ElementName = myGrid'绑定的源.BindingExpression:Path = ActualWidth; DataItem = null;目标元素是'Label'(Name =''); target属性是'内容'(类型'对象')"
我正在使用Visual Studio 2015社区版与.Net Framework 4.5.2.有任何想法吗?先感谢您.
wpf ×3
binding ×2
c# ×2
data-binding ×2
xaml ×2
datagrid ×1
mvvm ×1
silverlight ×1
visibility ×1
xamarin ×1