<ListView Margin="10" x:Name="lvHistory">
<ListView.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Left" />
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Header="Database" Width="150" DisplayMemberBinding="{Binding ActiveBackup.Database.Name, Mode=TwoWay}" />
<GridViewColumn Header="Start Time" Width="130" DisplayMemberBinding="{Binding ActiveBackup.StartTime, Mode=TwoWay}" />
<GridViewColumn Header="Time Elapsed" Width="100" DisplayMemberBinding="{Binding ActiveBackup.TimeElapsed, Mode=TwoWay}" />
<GridViewColumn Header="P2" Width="100" DisplayMemberBinding="{Binding Progress, Mode=TwoWay}" />
<GridViewColumn x:Name="progressColumn" Header="Progress" Width="150">
<GridViewColumn.CellTemplate>
<DataTemplate>
<local:cProgressBarSmall x:Name="pr1" Value="{Binding Progress, Mode=TwoWay}" Visibility="Visible" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
public partial class cProgressBarSmall : UserControl
{
public ActiveBackup ActiveBackup { get; set; }
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(decimal), typeof(cProgressBarSmall));
private decimal _value;
public decimal Value
{
get
{
return (decimal) GetValue(ValueProperty);
}
set
{
_value = value;
SetValue(ValueProperty, value);
p1.Value = value.ToDoubleNotNull();
pLabel.Text = value.ToPercent(0);
if (value == 0)
{
p1.Visibility = Visibility.Hidden;
pLabel.Visibility = Visibility.Hidden;
}
else if (value.ToDoubleNotNull() >= p1.Maximum)
{
pLabel.Text = "Finished!";
pLabel.Foreground = new SolidColorBrush(Colors.Black);
}
}
}
}
}
我找不到访问“PR1”的方法,因为它在DataTemplate中,因此不能直接从代码隐藏中访问。绑定不能通过吗?它之前的列(“P2”列)就在test列上,我放入该列只是为了确保该值确实在更新,并且正确显示,但是“ProgressColumn”总是只显示默认值。
在ListView.View>GridView>GridViewColumn>GridViewColumn.CellTemplate>DataTemplate层次结构中的数据绑定有什么特殊之处吗?
首先,如果在setter中放置断点,您会发现绑定没有命中断点。这是因为绑定设置的是dependency属性,而不是C#属性。他们不一样。带有get/set的C#属性是dependency属性的可选包装器。
正确的方法是很少或没有代码隐藏(代码隐藏并不邪恶;您只是不需要任何代码隐藏),而是使用usercontrol xaml中的绑定来更新UI。可以使用usercontrol XAML中的样式触发器隐藏和显示控件以及更新标签文本。您不需要任何代码。
但是这里有一个最简单的方法来使现有的代码适应一些工作。
public decimal Value
{
get { return (decimal)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(decimal), typeof(cProgressBarSmall),
new PropertyMetadata(0m, Value_ChangedCallback));
// Has to be static
private static void Value_ChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((cProgressBarSmall)d).OnValueChanged();
}
private void OnValueChanged()
{
p1.Value = Value.ToDoubleNotNull();
pLabel.Text = Value.ToPercent(0);
if (Value == 0)
{
p1.Visibility = Visibility.Hidden;
pLabel.Visibility = Visibility.Hidden;
}
else if (Value.ToDoubleNotNull() >= p1.Maximum)
{
pLabel.Text = "Finished!";
pLabel.Foreground = new SolidColorBrush(Colors.Black);
}
}
最好的办法是什么?根据显示的数据,我希望绑定到MyText1或MyText2。我怎么做“开关”?
null 谢谢
如何通过绑定隐藏 WPF 中的列? 这就是我所做的: 这是我得到的(除了仍然可见的列): System. Windows. Data错误:2:找不到目标元素的管理Frameworks Element或Frameworks ContentElement。绑定表达式:路径=My列可见性;数据项=空;目标元素是“DataG的文本列”(HashCode=1460142);目标属性是“可见性”(类型“可见性
我在这里遇到了TreeView绑定和ContextMenu的问题:Selected TreeView项为空 现在我有这个问题:我有ContextMenu (图片显示了我的ContextMenu的样子,不要介意tabItem...)。 正如你所看到的,它只是ContetMenu,没有MenuItem!如果用户单击“关闭”,我想在ViewModel中执行一些操作(发出命令?)。我还想知道他点了哪个按钮
我有一个包含文本框的DataTemplate。DataTemplate绑定到DevExpress FlyoutControl样式的ContentTemplate属性。Flyout控件本身位于另一个TextBox的ControlTemplate中。 ... 飞出正在用代码打开。在这里,我还想聚焦文本框(TextThatWantsFocus)。然而,我尝试过的任何东西都不会给它带来焦点(除了Focus