wpf 通过CodeBehind将可见性绑定到Viewmodel的属性[从视图绑定到ViewModel

cvxl0en2  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(187)

我在DockManager上动态创建绑定,以便在ViewModel中拥有一个属性,该属性告诉我视图/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,但这是不可能的,因为你已经告诉(没有设置程序)。
我的问题是,是否可以在代码后面绑定Visibility属性,这样我就可以将这些信息保存在视图模型中

lstz6jyr

lstz6jyr1#

绑定需要DependencyProperty。我将尝试在OneWayToSource模式下使用绑定,并使用公共BooleanToVisibilityConverter转换器绑定Visibility属性

var converter = new BooleanToVisibilityConverter();

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

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

相关问题