将饼系列绑定到复选框 - c# (LiveCharts)
Bind Pie Series to a checkbox - c# (LiveCharts)
我有一个带有复选框、文本框和饼图的简单程序。
我希望当我按下复选框时,文本框的颜色和文本会发生变化
以及饼图的一些 属性。
当我尝试将 属性 更改为 pieChart 本身时,它工作正常。
但我尝试更改其集合中的 属性 我收到错误
Cannot find source for binding with reference
我的代码
<Window x:Class="TestLiveCharts.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
x:Name="UC">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<CheckBox x:Name="cbSample" Content="Hello" Grid.Row="0" />
<TextBlock HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="48" Grid.Row="1">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="No" />
<Setter Property="Foreground" Value="Red" />
<Style.Triggers>
//--> this is where i get my error
<DataTrigger Binding="{Binding ElementName=cbSample, Path=IsChecked}" Value="True">
<Setter Property="Text" Value="Yes!" />
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<lvc:PieChart Grid.Row="2" x:Name="chart" Hoverable="True" HoverPushOut="6" >
<lvc:PieChart.Series>
<lvc:PieSeries Values="1" Fill="Black" StrokeThickness="0">
<lvc:PieSeries.Style>
<Style TargetType="lvc:PieSeries">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type CheckBox}}, Path=IsChecked}" Value="True">
<Setter Property="StrokeThickness" Value="10"/>
</DataTrigger>
</Style.Triggers>
</Style>
</lvc:PieSeries.Style>
</lvc:PieSeries>
<lvc:PieSeries Values="1" Fill="Green" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Yellow" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="DarkCyan" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Gray" StrokeThickness="0"/>
</lvc:PieChart.Series>
</lvc:PieChart>
</Grid>
</Window>
我会将复选框的 IsChecked 属性 绑定到视图模型中的值,并将数据触发器绑定到视图模型中的相同值。
或者,绑定到 ElementName 在这两种情况下都有效 - 试试这个:
<Window x:Class="TestLiveCharts.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
x:Name="UC">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<CheckBox x:Name="cbSample" Content="Hello" Grid.Row="0" />
<TextBlock HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="48" Grid.Row="1">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="No" />
<Setter Property="Foreground" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbSample, Path=IsChecked}" Value="True">
<Setter Property="Text" Value="Yes!" />
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<lvc:PieChart Grid.Row="2" x:Name="chart" Hoverable="True" HoverPushOut="6" >
<lvc:PieChart.Series>
<lvc:PieSeries Values="1" >
<lvc:PieSeries.Style>
<Style TargetType="lvc:PieSeries">
<Setter Property="StrokeThickness" Value="0"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbSample, Path=IsChecked}" Value="True">
<Setter Property="StrokeThickness" Value="10"/>
</DataTrigger>
</Style.Triggers>
</Style>
</lvc:PieSeries.Style>
</lvc:PieSeries>
<lvc:PieSeries Values="1" Fill="Green" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Yellow" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="DarkCyan" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Gray" StrokeThickness="0"/>
</lvc:PieChart.Series>
</lvc:PieChart>
</Grid>
单击复选框将得到以下结果:
或尝试绑定到视图模型:
<Window x:Class="WhosebugTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
x:Name="UC">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<CheckBox x:Name="cbSample" Content="Hello" Grid.Row="0" IsChecked="{Binding Checked}"/>
<TextBlock HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="48" Grid.Row="1">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="No" />
<Setter Property="Foreground" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding Checked}" Value="True">
<Setter Property="Text" Value="Yes!" />
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<lvc:PieChart Grid.Row="2" x:Name="chart" Hoverable="True" HoverPushOut="6" >
<lvc:PieChart.Series>
<lvc:PieSeries Values="1" >
<lvc:PieSeries.Style>
<Style TargetType="lvc:PieSeries">
<Setter Property="StrokeThickness" Value="0"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Checked}" Value="True">
<Setter Property="StrokeThickness" Value="10"/>
</DataTrigger>
</Style.Triggers>
</Style>
</lvc:PieSeries.Style>
</lvc:PieSeries>
<lvc:PieSeries Values="1" Fill="Green" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Yellow" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="DarkCyan" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Gray" StrokeThickness="0"/>
</lvc:PieChart.Series>
</lvc:PieChart>
</Grid>
using System.ComponentModel;
using System.Windows;
namespace WhosebugTest
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
bool _checked = true;
public bool Checked
{
get
{
return _checked;
}
set
{
_checked = value;
RaisePropertyChanged(nameof(Checked));
}
}
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我有一个带有复选框、文本框和饼图的简单程序。
我希望当我按下复选框时,文本框的颜色和文本会发生变化
以及饼图的一些 属性。
当我尝试将 属性 更改为 pieChart 本身时,它工作正常。
但我尝试更改其集合中的 属性 我收到错误
Cannot find source for binding with reference
我的代码
<Window x:Class="TestLiveCharts.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
x:Name="UC">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<CheckBox x:Name="cbSample" Content="Hello" Grid.Row="0" />
<TextBlock HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="48" Grid.Row="1">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="No" />
<Setter Property="Foreground" Value="Red" />
<Style.Triggers>
//--> this is where i get my error
<DataTrigger Binding="{Binding ElementName=cbSample, Path=IsChecked}" Value="True">
<Setter Property="Text" Value="Yes!" />
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<lvc:PieChart Grid.Row="2" x:Name="chart" Hoverable="True" HoverPushOut="6" >
<lvc:PieChart.Series>
<lvc:PieSeries Values="1" Fill="Black" StrokeThickness="0">
<lvc:PieSeries.Style>
<Style TargetType="lvc:PieSeries">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type CheckBox}}, Path=IsChecked}" Value="True">
<Setter Property="StrokeThickness" Value="10"/>
</DataTrigger>
</Style.Triggers>
</Style>
</lvc:PieSeries.Style>
</lvc:PieSeries>
<lvc:PieSeries Values="1" Fill="Green" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Yellow" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="DarkCyan" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Gray" StrokeThickness="0"/>
</lvc:PieChart.Series>
</lvc:PieChart>
</Grid>
</Window>
我会将复选框的 IsChecked 属性 绑定到视图模型中的值,并将数据触发器绑定到视图模型中的相同值。
或者,绑定到 ElementName 在这两种情况下都有效 - 试试这个:
<Window x:Class="TestLiveCharts.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
x:Name="UC">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<CheckBox x:Name="cbSample" Content="Hello" Grid.Row="0" />
<TextBlock HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="48" Grid.Row="1">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="No" />
<Setter Property="Foreground" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbSample, Path=IsChecked}" Value="True">
<Setter Property="Text" Value="Yes!" />
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<lvc:PieChart Grid.Row="2" x:Name="chart" Hoverable="True" HoverPushOut="6" >
<lvc:PieChart.Series>
<lvc:PieSeries Values="1" >
<lvc:PieSeries.Style>
<Style TargetType="lvc:PieSeries">
<Setter Property="StrokeThickness" Value="0"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbSample, Path=IsChecked}" Value="True">
<Setter Property="StrokeThickness" Value="10"/>
</DataTrigger>
</Style.Triggers>
</Style>
</lvc:PieSeries.Style>
</lvc:PieSeries>
<lvc:PieSeries Values="1" Fill="Green" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Yellow" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="DarkCyan" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Gray" StrokeThickness="0"/>
</lvc:PieChart.Series>
</lvc:PieChart>
</Grid>
单击复选框将得到以下结果:
或尝试绑定到视图模型:
<Window x:Class="WhosebugTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
x:Name="UC">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<CheckBox x:Name="cbSample" Content="Hello" Grid.Row="0" IsChecked="{Binding Checked}"/>
<TextBlock HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="48" Grid.Row="1">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="No" />
<Setter Property="Foreground" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding Checked}" Value="True">
<Setter Property="Text" Value="Yes!" />
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<lvc:PieChart Grid.Row="2" x:Name="chart" Hoverable="True" HoverPushOut="6" >
<lvc:PieChart.Series>
<lvc:PieSeries Values="1" >
<lvc:PieSeries.Style>
<Style TargetType="lvc:PieSeries">
<Setter Property="StrokeThickness" Value="0"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Checked}" Value="True">
<Setter Property="StrokeThickness" Value="10"/>
</DataTrigger>
</Style.Triggers>
</Style>
</lvc:PieSeries.Style>
</lvc:PieSeries>
<lvc:PieSeries Values="1" Fill="Green" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Yellow" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="DarkCyan" StrokeThickness="0"/>
<lvc:PieSeries Values="1" Fill="Gray" StrokeThickness="0"/>
</lvc:PieChart.Series>
</lvc:PieChart>
</Grid>
using System.ComponentModel;
using System.Windows;
namespace WhosebugTest
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
bool _checked = true;
public bool Checked
{
get
{
return _checked;
}
set
{
_checked = value;
RaisePropertyChanged(nameof(Checked));
}
}
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}