如何在按钮上使用工具栏(它是用户控件)来启用等待游标。我有一个ViewModel是从viewmodelBase继承来的。但是我不能在工具栏上使用IsWorking。
下面是工具栏的代码。我点击了选择按钮。数据是从数据库中选择的。光标必须切换到wait.after选择,光标必须返回正常。
<Button x:Name="Select"
Content="select"
Command="{Binding SelectCommand }">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Cursor" Value="Arrow"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsWorking}" Value="True">
<Setter Property="Cursor" Value="Wait"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>ViewModelBase.cs:工具栏中没有继承。这是个基本模型。
private bool _isWorking = false;
public bool IsWorking
{
get { return _isWorking; }
set
{
_isWorking = value;
OnPropertyChanged("IsWorking");
}
}以下是视图模型中的代码:
public class MainViewModel : ViewModelBase
{
public void Select()
{
IsWorking = true; cursor turn to wait mode
// db Process...
IsWorking = false; cursor turn to hand mode
}
}如何从ViewModel与工具栏进行通信?单击“选择游标必须是旋转等待模式”。选择后,光标必须是手动(默认)。
Changing the cursor in WPF sometimes works, sometimes doesn't

发布于 2012-12-04 14:34:37
据我所见,您的问题是试图将UserControl绑定回它所在的视图/窗口。
当然,usercontrol不能像这样绑定。你有几个选择:
1.给UserControl视图的数据文本:
<local:UserControl1 DataContext="{Binding ElementName=MyWindow}" />然后在UserControl中可以直接绑定到ViewModel的IsWorking:
<DataTrigger Binding="{Binding IsWorking}" Value="True">
<Setter Property="Cursor" Value="Wait"/>
</DataTrigger>2.在UserControl上创建一个依赖项属性,并从视图:绑定到它
在您的用户控件中创建一个新的DP:
public bool MyIsWorking
{
get { return (bool)GetValue(MyIsWorkingProperty ); }
set { SetValue(MyIsWorkingProperty , value); }
}
public static readonly DependencyProperty MyIsWorkingProperty =
DependencyProperty.Register("MyIsWorking", typeof(bool), typeof(UserControl1), new UIPropertyMetadata(false));在用户控件的XAML绑定到DP中:
<DataTrigger Binding="{Binding MyIsWorking}" Value="True">
<Setter Property="Cursor" Value="Wait"/>
</DataTrigger>在窗口中-将DP绑定到VM的IsWorking属性:
<local:UserControl1 MyIsWorking="{Binding IsWorking, ElementName=MyWindow}" />3.最后, will 工作,但不推荐!!**
<DataTrigger Binding="{Binding IsWorking, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" Value="True">
<Setter Property="Cursor" Value="Wait"/>
</DataTrigger>这样做是试图在视觉树中找到窗口并使用它的DataContext。为什么不推荐呢?因为您可能不在窗口中使用它,或者您可能不希望它绑定到包含的窗口正在使用的特定DataContext。不管怎样,这是另一种可能性。
https://stackoverflow.com/questions/13704898
复制相似问题