将可见性绑定到ViewBodel的Viewmodel属性[来自View To ViewModel]

时间:2018-04-11 12:26:26

标签: c# wpf

我正在DockManager上动态创建绑定,以便在ViewModel中有一个属性,告诉我View / ViewModel是否可见。

我已经完成了一些测试,因为我已经完成了其他绑定,但在这种特殊情况下我需要从视图绑定到ViewModel而不是相反的

我的代码看起来像

VisibilityToBooleanConverter converter = new VisibilityToBooleanConverter();

var myBinding = new Binding
{
    Source = pane.Content, //this is the view
    Path = new PropertyPath("Visibility"),
    Mode = BindingMode.OneWay,
    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
    Converter = converter
};

BindingOperations.SetBinding(pane.DataContext,) //<-- how do I tell that I've to bind to a ViewModel?

//BindingOperations.SetBinding((UIElement)pane.Content, UIElement.VisibilityProperty, myBinding); //this was the test I've done but with no luck

有什么建议吗?

更新#1

我试图更好地解释我的情景,正如我所建议的那样。

我有一个显示不同视图的DockManager。其中一些视图具有实时更新,这些视图确实在高频率下完成。如果它们不可见则更新它们是没用的。

所以首先我试图绑定IsVisible但是你不可能这样做(没有setter)。

我的问题是,可以在后面的代码中绑定Visibility属性,以便我可以以某种方式保存在viewmodel中的这些信息

1 个答案:

答案 0 :(得分:1)

绑定需要DependencyProperty。我会尝试在OneWayToSource模式下使用Binding并绑定Visibility属性,使用常见的BooleanToVisibilityConverter转换器

var converter = new BooleanToVisibilityConverter();

var myBinding = new Binding
{
    Path = new PropertyPath("IsVisiblePropertyInViewModel"),
    Mode = BindingMode.OneWayToSource,
    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
    Converter = converter
};

BindingOperations.SetBinding(pane, UIElement.Visibility, binding);